mysql ,binlog 日志查询
Posted 猎人在吃肉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql ,binlog 日志查询相关的知识,希望对你有一定的参考价值。
文章目录
一、开启binlog
在 mysql 配置文件 my.cnf 中,开启 log-bin 功能,log-bin=mysql-bin
确认是打开状态。
[mysqld]
log-bin=mysql-bin
说明,值 mysql-bin 是日志的基本名或前缀名。
二、通过mysql的变量配置表,查看二进制日志是否已开启
mysql> show variables like 'log%';
+----------------------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------------------+--------------------------------------+
| log_bin | ON | ---> ON,表示已经开启binlog日志
| log_bin_basename |/usr/local/mysql/data/mysql-bin | ---> binlog日志存储位置
| log_bin_index |/usr/local/mysql/data/mysql-bin.index | ---> binlog日志的格式
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_builtin_as_identified_by_password | OFF |
| log_error | /data1/mysql/logs/error.log |
| log_error_verbosity | 3 |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | ON |
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| log_statements_unsafe_for_binlog | ON |
| log_syslog | OFF |
| log_syslog_facility | daemon |
| log_syslog_include_pid | ON |
| log_syslog_tag | |
| log_throttle_queries_not_using_indexes | 0 |
| log_timestamps | UTC |
| log_warnings | 2 |
+----------------------------------------+--------------------------------------+
三、binlog日志内容查看
1、mysql 查看 binlog 命令
mysql> show binlog events; # 只查看第一个 binlog 文件的内容
mysql> show binlog events in 'mysql-bin.000002'; # 查看指定 binlog 文件的内容
mysql> show binary logs; # 获取 binlog 文件列表
mysql> show master status; # 查看当前正在写入的 binlog 文件
2、找到 mysqlbinlog 命令
mysqlbinlog是一个查看 mysql 二进制日志的工具,可以把mysql上面的所有操作记录从日志里导出,这个工具默认的安装路径为:/usr/local/mysql/bin/mysqlbinlog
。
可以通过命令查找 mysqlbinlog 的工具路径:
find / -name "mysqlbinlog"
3、使用 mysqlbinlog 命令
bin log
是二进制文件,二进制文件更省空间,写入速度更快,是无法直接打开来查看的。
(1) 如果 log-bin 文件比较小,可以直接查看日志:
/usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.0007
--no-defaults
可以省略,参考 下面的mysqlbinlog 异常
说明。
(2) 将log-bin解析后的日志转入到指定文件
/usr/local/mysql/bin/mysqlbinlog --no-defaults/usr/local/mysql/data/mysql-bin.0007 > /tmp/mysql_bin_07.sql
(3)基于开始和结束时间:
/usr/local/mysql/bin/mysqlbinlog --start-datetime="2021-10-01 00:00:00" --stop-datetime="2021-10-21 23:59:59" /usr/local/mysql/data/mysql-bin.0007 -r test2.sql
(4)增加过滤,只查询 insert、update、delete 的语句,使用用more来查看:
/usr/local/mysql/bin/mysqlbinlog --no-defaults --database=raceEnroll mysql-bin.000007 |grep update | more
4、mysqlbinlog 异常
直接 执行 /usr/local/mysql/bin/mysqlbinlog mysql-bin.000007
日志时,可能会报如下错误:
mysql> /usr/local/mysql/bin/mysqlbinlog mysql-bin.000007
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4'
mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'
原因:
mysqlbinlog这个工具无法识别binlog中的配置中的 ``default-character-set=utf8mb4` 这个指令。
解决方法:
添加 --no-defaults 参数,即: /usr/local/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000007
。
四、常用的Binlog操作命令
# 是否启用binlog日志
show variables like 'log_bin';
# 查看详细的日志配置信息
show global variables like '%log%';
# mysql数据存储目录
show variables like '%dir%';
# 查看binlog的目录
show global variables like "%log_bin%";
# 查看当前服务器使用的biglog文件及大小
show binary logs;
# 查看主服务器使用的biglog文件及大小
# 查看最新一个binlog日志文件名称和Position
show master status;
# 事件查询命令
# IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)
# FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
# LIMIT [offset,] :偏移量(不指定就是0)
# row_count :查询总条数(不指定就是所有行)
show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
# 查看 binlog 内容
show binlog events;
# 查看具体一个binlog文件的内容 (in 后面为binlog的文件名)
show binlog events in 'master.000003';
# 设置binlog文件保存事件,过期删除,单位天
set global expire_log_days=3;
# 删除当前的binlog文件
reset master;
# 删除slave的中继日志
reset slave;
# 删除指定日期前的日志索引中binlog日志文件
purge master logs before '2019-03-09 14:00:00';
# 删除指定日志文件
purge master logs to 'master.000003';
以上是关于mysql ,binlog 日志查询的主要内容,如果未能解决你的问题,请参考以下文章