错误日志
错误日志记录了mysql在启动及停止时,还有服务器运行时发生的严重错误信息。默认存放目录是/var/log/,默认的日志文件名是mysqld.log。
可以通过show variables like "%log_error%"来查看日志存放目录。
二进制日志
二进制日志(BINLOG)内容
记录所有DDL(数据定义语言)和DML(数据操纵语言)语句,不包括SELECT、SHOW等数据查询语句。
MySQL 8相关 MySQL 8版本默认开启二进制日志,可通过show variables like '%log_bin%'查看相关参数。
作用
- 灾难时用于数据恢复。
- 支持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语句。默认未开启。
开启方式
- 查看当前状态:执行
show variables like '%general%';,可看到general_log(默认OFF)和general_log_file(默认路径/var/lib/mysql/localhost.log)。 - 修改配置文件:编辑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