日志

110 阅读3分钟

错误日志

错误日志记录了mysql在启动及停止时,还有服务器运行时发生的严重错误信息。默认存放目录是/var/log/,默认的日志文件名是mysqld.log。

可以通过show variables like "%log_error%"来查看日志存放目录。

二进制日志

二进制日志(BINLOG)内容

记录所有DDL(数据定义语言)和DML(数据操纵语言)语句,不包括SELECT、SHOW等数据查询语句。

MySQL 8相关 MySQL 8版本默认开启二进制日志,可通过show variables like '%log_bin%'查看相关参数。

作用

  1. 灾难时用于数据恢复。
  2. 支持MySQL的主从复制。

二进制日志格式及含义

日志格式含义
STATEMENT基于SQL语句记录,记录修改数据的SQL语句。
ROW基于行记录,记录每行数据变更,是默认格式。
MIXED混合STATEMENT和ROW格式,默认用STATEMENT,特殊情况自动切换为ROW记录。

查看日志格式命令

show variables like '%binlog_format%';

二进制日志查看方式

二进制日志以二进制存储,需用mysqlbinlog工具查看,语法为mysqlbinlog [参数选项] logfilename

常用参数选项及作用

参数选项作用
-d指定数据库名,仅列出该数据库相关操作。
-o忽略日志前n行命令。
-v将行事件(数据变更)重构为SQL语句。
-w将行事件(数据变更)重构为SQL语句,并输出注释信息。

二进制日志删除指令及含义

指令含义
reset master删除全部binlog日志,之后日志编号从binlog.000001重新开始。
purge master logs to 'binlog.******'删除指定编号之前(不包含指定的编号)的所有日志。
purge master logs before 'yyyy-mm-dd hh24:mi:ss'删除指定时间之前产生的所有日志。

自动删除配置

可在MySQL配置文件中配置二进制日志过期时间,设置后过期自动删除,通过show variables like '%binlog_expire_logs_seconds%';查看相关变量。

查询日志

查询日志记录客户端所有操作语句,二进制日志不包含查询数据的SQL语句。默认未开启。

开启方式

  1. 查看当前状态:执行show variables like '%general%'; ,可看到general_log (默认OFF )和general_log_file (默认路径/var/lib/mysql/localhost.log )。
  2. 修改配置文件:编辑MySQL配置文件/etc/my.cnf ,添加:
#0代表关闭,1代表开启查询日志
general_log=1
#设置日志文件名,未指定则默认为host_name.log
general_log_file=mysql_query.log

慢查询日志

慢查询日志记录执行时间超long_query_time设置值,且扫描记录数不小于min_examined_row_limit的SQL语句,默认未开启 。long_query_time默认10秒,最小0 ,精度达微秒。

开启及参数设置

修改MySQL配置文件,示例配置:

#开启慢查询日志
slow_query_log=1
#设置执行时间参数为2秒
long_query_time=2 

扩展记录设置

慢查询日志默认不记录管理语句和不使用索引的查询,可通过以下配置更改:

#记录执行较慢的管理语句
log_slow_admin_statements=1
#记录执行较慢的未使用索引的语句
log_queries_not_using_indexes=1