mysql如何启用日志记录_mysql日志配置

2次阅读

先执行show variables查看日志启用状态及路径,再通过修改配置文件永久开启并重启服务验证;动态开启仅临时有效,需注意权限、路径和磁盘空间问题。

mysql如何启用日志记录_mysql日志配置

怎么确认当前开了哪些日志

别急着改配置,先连上 mysql 看一眼现状:
mysql -u root -p → 输入密码后执行:
SHOW VARIABLES LIKE 'general_log%';
SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'log_Error';
SHOW VARIABLES LIKE 'log_bin';
这些命令能分别告诉你通用日志、慢查询日志、错误日志、binlog 是否启用,以及它们的路径。如果值是 OFF 或空,说明没开;ON 且路径存在,才算真正生效。

永久开启日志:改配置文件最稳妥

临时用 SET GLOBAL 开启日志,MySQL 重启就失效,生产环境必须写进配置文件。
找到主配置文件(常见位置:/etc/my.cnf/etc/mysql/my.cnf/etc/my.cnf.d/server.cnf),在 [mysqld] 段下添加:

  • log-error = /var/log/mysql/error.log(错误日志,建议必开)
  • general_log = ON + general_log_file = /var/log/mysql/general.log(通用日志,记录所有语句,磁盘吃紧慎开)
  • slow_query_log = ON + slow_query_log_file = /var/log/mysql/slow.log + long_query_time = 2(慢查日志,阈值按业务调,1~5 秒较常见)
  • log-bin = /var/lib/mysql/mysql-bin(binlog,主从/恢复必需,但有约 1% 性能损耗)

改完务必 sudo systemctl restart mysqld(或 service mysqld restart),再用前面的 SHOW VARIABLES 验证。

动态开启日志:适合调试但不持久

不想重启服务?可以用 SQL 命令临时打开(仅对当前会话或全局生效):

  • 开通用日志:SET GLOBAL general_log = 'ON'; + SET GLOBAL general_log_file = '/tmp/mysql-general.log';
  • 开慢查日志:SET GLOBAL slow_query_log = 'ON'; + SET GLOBAL long_query_time = 1;
  • 注意:SET GLOBAL 不影响已存在的连接,新连接才生效;且只在本次运行周期有效
  • 如果报错 ERROR 1238 (HY000): Variable 'general_log' is a read only variable,说明配置文件里禁用了动态修改(如设置了 read_only 或启用了某些安全插件)

日志路径和权限最容易出问题

即使配置全对,日志也可能写不进去——90% 是路径或权限问题:

  • 确保目录存在:sudo mkdir -p /var/log/mysql
  • 确保 MySQL 进程用户(通常是 mysql)有写权限:sudo chown mysql:mysql /var/log/mysql
  • 避免写到根分区或 /tmp:日志增长快,容易撑爆磁盘;推荐挂载独立小分区或用 logrotate 定期轮转
  • 不要把日志和数据目录混放(比如都丢在 /var/lib/mysql):一来难管理,二来某些备份工具会误删日志文件

binlog 和 error log 尤其敏感:路径写错会导致 MySQL 启动失败,直接卡在 service 启动阶段,查 journalctl -u mysqld 才能看到真实报错。

text=ZqhQzanResources