MySQL错误日志在CentOS上无法自身轮转,必须用logrotate配合kill -USR1或mysqladmin flush-logs通知mysqld释放旧句柄,否则磁盘不释放、日志丢失、权限错乱;须先确认log_error为绝对路径且非journald接管,再确保目录权限、PID路径、sharedscripts和create参数完全匹配mysqld进程用户。

MySQL错误日志在CentOS上无法靠自身轮转,必须用logrotate配合信号或命令通知mysqld释放旧文件句柄——否则磁盘空间不释放、日志写入丢失、新文件权限错乱。
先确认log_error是否真实写入文件
很多CentOS环境用systemd启动MySQL,log_error返回NULL或/dev/null,说明日志被journald接管。此时你配的logrotate根本不会生效。
- 执行
mysql -e "show variables like 'log_error';",看输出是不是绝对路径(如/var/log/mysql/error.log) - 若为空或不是绝对路径,检查
systemctl cat mysql,确认是否有StandardOutput=journal - 若有,必须在
/etc/my.cnf中显式设log-error = /var/log/mysql/error.log,并确保目录存在:mkdir -p /var/log/mysql && chown mysql:mysql /var/log/mysql - 改完必须
systemctl restart mysql,reload不生效
logrotate配置里必须用postrotate调用kill -USR1或mysqladmin flush-logs
只配daily、rotate 7没用。logrotate rename文件后,mysqld还在往旧inode写,磁盘不释放,且可能丢最后几秒日志。
MySQL 数据库管理技能,能够通过自然语言查询和管理数据库,支持 SELECT/INSERT/UPDATE/DELETE、表管理、备份恢复等操作。当用户提及 MySQL、数据库查询、建表或数据备份时使用此技能。
- 优先选
kill -USR1:它轻量、可靠,但要求PID文件路径准确。常见路径有/var/run/mysqld/mysqld.pid或/run/mysqld/mysqld.pid,用ps aux | grep mysqld确认 - 若PID路径不固定或不可靠,改用
mysqladmin -uflush-logs -p'xxx' flush-logs(账号需RELOAD权限),注意mysqladmin二进制路径(/usr/bin/mysqladmin或/usr/local/mysql/bin/mysqladmin) - 务必加
sharedscripts,否则多个日志路径匹配时postrotate会重复执行,可能发两次USR1导致异常 - 禁用
copytruncate:MySQL 5.7+下易丢日志,且不保证原子性
create权限和用户组必须与mysqld进程完全一致
90%的轮转失败不是逻辑问题,是权限错位。新建日志文件属主错,mysqld启动或重开日志时直接静默失败,后续日志全丢。
- 用
ps aux | grep mysqld看主进程以哪个用户运行(通常是mysql,极少数RPM包用mysqld) -
create 0640 mysql mysql必须写对,不能漏组名、不能写root root - 如果MySQL跑在容器里,logrotate执行时可能无权访问
/var/run/mysqld或socket,需调整容器挂载或改用host网络模式 - 测试时用
logrotate -f /etc/logrotate.d/mysql强制触发,再立刻ls -l /var/log/mysql/error.log*看新文件属主和权限
验证不能只看文件名变化,要查lsof和真实写入
轮转后新文件空着、旧文件还被占用、或者日志停写,都是典型未生效信号的表现。
- 轮转前:
lsof -p $(cat /var/run/mysqld/mysqld.pid) | grep error,记下当前inode号 - 轮转后:
lsof -p $(cat /var/run/mysqld/mysqld.pid) | grep error,确认inode已变,且指向新文件 - 手动触发一个错误:
mysql -e "SELECT * FROM nonexist_table;",检查新error.log是否立刻追加内容 - 别等cron,用
logrotate -d /etc/logrotate.d/mysql先看模拟输出,确认postrotate块被调用且无报错

















