MySQL日志
错误日志
mysqld启动和关闭过程中输出的事件信息、运行中产生的错误信息、event scheduler运行一个event时产生的日志信息、在主从复制架构中的从服务器上启动从服务器线程时产生的信息
错误日志相关配置:
mysql> show global variables like 'log_error';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| log_error | stderr |
+---------------+--------+
1 row in set (0.00 sec)
错误日志文件路径:
[mysqld]
log_error=/data/logs/mysql.log
是否记录警告信息至错误日志文件:
[mysqld]
log_warnings=1|0 默认值1
通用日志
记录对数据库的通用操作,包括错误的SQL语句:存储在文件file、表table,默认值文件
通用日志相关配置:
show global variables like 'general%';
general_log=ON|OFF 默认值OFF
general_log_file=HOSTNAME.log
show global variables like 'log_output';
log_output=TABLE|FILE|NONE 记录方式,默认文件file
开启通用日志,表形式
[mysqld]
log_output=table
general_log
慢查询日志
记录执行查询时长超出指定时长的操作
慢查询日志相关配置:
slow_query_log=ON|OFF 开启或关闭慢查询
long_query_time=number 慢查询的阀值,单位秒
slow_query_log_file=HOSTNAME-slow.log 慢查询日志文件
log_slow_filter = admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
上述查询类型且查询时长超过long_query_time,则记录日志
log_queries_not_using_indexes=ON 不使用索引或使用全索引扫描,不论是否达到慢查询阀值的语句是否记录日志,默认OFF,即不记录
log_slow_rate_limit = 1 多少次查询才记录,mariadb特有
log_slow_verbosity= Query_plan,explain 记录内容
log_slow_queries = OFF 同slow_query_log 新版已废弃
开启慢查询日志
[mysqld]
slow_query_log
long_query_time=3 超过3秒记录
查询慢在哪里的原因-profiling
show variables like 'profiling'; 查询是否开启
set profiling=on;
show profiles; 查看有多少个慢查询记录在内
show profile for query 2; 查看Query_ID=2的查询过程
二进制日志
记录导致数据改变或潜在导致数据改变的SQL语句
记录已提交的日志
不依赖于存储引擎类型
功能:通过“重放”日志文件中的事件来生成数据副本
注意:建议二进制日志和数据文件分开存放
二进制日志记录格式
- 基于“语句”记录:statement,记录语句
- 基于“行”记录:row,记录数据,日志量较大
- 混合模式:mixed, 让系统自行判定该基于哪种方式进行
查看格式当前:
show variables like 'binlog_format';
二进制日志文件的构造
两类文件:
-
日志文件: mysql|mariadb-bin.文件名后缀(mysql-bin.000001),二进制格式
-
索引文件:mysql|mariadb-bin.index,文本格式。
二进制文件相关配置
sql_log_bin=ON|OFF:是否记录二进制日志,默认ON
log_bin=/PATH/BIN_LOG_FILE:指定文件位置;默认OFF,表示不启用二进制日志功能
上述两项都开启才可以
binlog_format=STATEMENT|ROW|MIXED:二进制日志记录的格式
max_binlog_size=1073741824:单个二进制日志文件的最大体积,到达最大值会自动滚动,默认为1G
说明:文件达到上限时的大小未必为指定的精确值
sync_binlog=1|0:设定是否启动二进制日志即时同步磁盘功能,默认0,由操作系统负责同步日志到磁盘
expire_logs_days=N:二进制日志可以自动删除的天数。 默认为0,即不自动删除
开启,建议二进制日志和数据文件分开存放
[mysqld]
log-bin=/data/logbin/mysql-bin
查看mariadb自行管理使用中的二进制日志文件列表,及大小
show {BINARY | MASTER} logs
查看使用中的二进制日志文件
SHOW MASTER STATUS
查看二进制文件中的指定内容
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
show binlog events in 'mysql-bin.000001';
show binlog events in 'mysql-bin.000001' from 6516;
show binlog events in 'mysql-bin.000001' from 6516 limit 2,3;
二进制日志的客户端命令工具
二进制日志的客户端命令工具:mysqlbinlog
命令格式:mysqlbinlog [OPTIONS] log_file
--start-position=# 指定开始位置
--stop-position=#
--start-datetime=
--stop-datetime=
时间格式:YYYY-MM-DD hh:mm:ss
--base64-output[=name]
-v -vvv
示例:
mysqlbinlog --start-position=6787 --stop-position=7527 /var/lib/mysql/mariadb-bin.000003 -v
mysqlbinlog --start-datetime="2018-01-30 20:30:10" --stopdatetime="2018-01-30 20:35:22" mariadb-bin.000003 -vvv
mysqlbinlog /var/lib/mysql/mariadb-bin.000003 -v > test.sql