# MySQL 8.4 日志管理指南 > **AI 响应规范 (MySQL 执行策略)**: > 1. **强制参数**: 所有 `docker exec` 命令必须包含 `-h127.0.0.1` 参数。 > 2. **双重输出**: 涉及 SQL 操作时,必须同时输出 `Docker 执行命令` 和 `纯 SQL 脚本`。 ## 1. 日志轮转配置 防止日志文件过大,两台主机配置一致。创建 `/etc/logrotate.d/mysql_error_log`: ```plain /data/mysql/logs/mysql_error.log /data/mysql/logs/mysql_slow.log { daily # 每天轮转 missingok # 文件不存在不报错 rotate 30 # 保留30天日志 compress # 压缩旧日志 delaycompress # 延迟压缩(避免写入异常) notifempty # 空文件不轮转 create 644 # 新日志权限 postrotate # 刷新MySQL日志文件 docker exec mysql mysql -uroot -pafe123456 -h127.0.0.1 -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;" || true endscript } ``` ### 1.1 手动测试日志轮转 ```bash logrotate -f /etc/logrotate.d/mysql_error_log ``` ## 2. 加密登录配置(.mylogin.cnf) ### 2.1 配置目的 为避免执行日志刷新操作时明文暴露数据库账号密码,通过 `mysql_config_editor` 生成加密的 `.mylogin.cnf` 文件,实现安全、免密的日志操作。 ### 2.2 操作步骤 #### 步骤 1:在宿主机器生成加密登录配置 直接在宿主机器执行以下命令(两台双主节点均需执行): ```bash mysql_config_editor set \ --login-path=mysql_log_flush \ # 自定义标识 --user=log_flush \ # 提前创建的日志操作专用低权限账号 --password \ # 交互式输入密码 --host=127.0.0.1 \ # 本地连接地址 --port=3306 # MySQL 服务端口 ``` #### 步骤 2:将配置文件同步至 MySQL 容器 有两种实现方式: **方式 1:复制配置文件到容器内** ```bash sudo docker cp ~/.mylogin.cnf mysql:/root/.mylogin.cnf ``` **方式 2:执行命令时临时挂载配置文件** ```bash docker exec -v ~/.mylogin.cnf:/root/.mylogin.cnf mysql \ mysql --login-path=mysql_log_flush -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;" ``` #### 步骤 3:使用加密配置执行日志操作 ```bash docker exec mysql mysql --login-path=mysql_log_flush -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;" ``` ### 2.3 安全与权限注意事项 1. **专用账号权限最小化**:仅授予 `RELOAD` 权限。 **A. Docker 执行模式:** ```bash docker exec -it mysql mysql -uroot -pafe123456 -h127.0.0.1 -e " CREATE USER 'log_flush'@'127.0.0.1' IDENTIFIED BY 'afe123456'; GRANT RELOAD ON *.* TO 'log_flush'@'127.0.0.1'; FLUSH PRIVILEGES; " ``` **B. 纯 SQL 模式:** ```sql CREATE USER 'log_flush'@'127.0.0.1' IDENTIFIED BY 'afe123456'; GRANT RELOAD ON *.* TO 'log_flush'@'127.0.0.1'; FLUSH PRIVILEGES; ``` 2. **配置文件权限管控**:`.mylogin.cnf` 权限应为 600。 3. **密码更新处理**:若密码修改,需重新生成配置。