Files
agent-skills/skills/g3fo-docs/references/middleware/mysql/log-management.md
T

2.9 KiB
Raw Blame History

MySQL 8.4 日志管理指南

AI 响应规范 (MySQL 执行策略):

  1. 强制参数: 所有 docker exec 命令必须包含 -h127.0.0.1 参数。
  2. 双重输出: 涉及 SQL 操作时,必须同时输出 Docker 执行命令 和 纯 SQL 脚本。

1. 日志轮转配置

防止日志文件过大,两台主机配置一致。创建 /etc/logrotate.d/mysql_error_log:

/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 手动测试日志轮转

logrotate -f /etc/logrotate.d/mysql_error_log

2. 加密登录配置(.mylogin.cnf)

2.1 配置目的

为避免执行日志刷新操作时明文暴露数据库账号密码,通过 mysql_config_editor 生成加密的 .mylogin.cnf 文件,实现安全、免密的日志操作。

2.2 操作步骤

步骤 1:在宿主机器生成加密登录配置

直接在宿主机器执行以下命令(两台双主节点均需执行):

mysql_config_editor set \
--login-path=mysql_log_flush \  # 自定义标识
--user=log_flush \              # 提前创建的日志操作专用低权限账号
--password \                    # 交互式输入密码
--host=127.0.0.1 \              # 本地连接地址
--port=3306                     # MySQL 服务端口

步骤 2:将配置文件同步至 MySQL 容器

有两种实现方式:

方式 1:复制配置文件到容器内

sudo docker cp ~/.mylogin.cnf mysql:/root/.mylogin.cnf

方式 2:执行命令时临时挂载配置文件

docker exec -v ~/.mylogin.cnf:/root/.mylogin.cnf mysql \
mysql --login-path=mysql_log_flush -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;"

步骤 3:使用加密配置执行日志操作

docker exec mysql mysql --login-path=mysql_log_flush -e "FLUSH ERROR LOGS; FLUSH SLOW LOGS;"

2.3 安全与权限注意事项

  1. 专用账号权限最小化:仅授予 RELOAD 权限。

A. Docker 执行模式:

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 模式:

CREATE USER 'log_flush'@'127.0.0.1' IDENTIFIED BY 'afe123456';
GRANT RELOAD ON *.* TO 'log_flush'@'127.0.0.1';
FLUSH PRIVILEGES;
  1. 配置文件权限管控:.mylogin.cnf 权限应为 600。
  2. 密码更新处理:若密码修改,需重新生成配置。