文章目录
mysql之binlog
查看是否开启binlog日志:
show variables like 'log_%';
查找最新的binlog:
show master status;
查询偏移量:
show binlog events in 'mysql-bin.000043';
数据恢复(执行报错):
mysqlbinlog binlog日志文件 --start-position 初始偏移量的位置 --stop-position 结束偏移量的位置 | mysql -u root -p 数据库名称;
mysqlbinlog d:\software\mysql8.0.18\Database\binlog.000012 --start-position 40503 --stop-position 40556 | mysql -u root -p pingtouge;
mysqlbinlog --start-position=40503 --stop-position=40556 d:\software\mysql8.0.18\Database\binlog.000012 | mysql -uroot -p pingtouge;
查看官方文档:
https://dev.mysql.com/doc/refman/8.0/en/
https://gitee.com/hoctor/mysql8zh/attach_files
binlog生成sql:
mysqlbinlog --start-position=4 --stop-position=610 d:\software\mysql8.0.18\Database\binlog.000012 | mysql -uroot -p > master-log.sql
mysqlbinlog /var/lib/mysql/master-log.000001 -d hse_whj > ./backup_whj/hse_whj_log.sql
grep搜索sql语句:
grep -B3 -w whj_a hse_whj_log.sql |grep -v '^--$' > whj_a.sql
binlog解析
- binlog格式是二进制日志,mysql使用mysqlbinlog工具解析。
- 语法格式:mysqlbinlog mysql-bin.000001 | mysql -uroot -p 数据库名
mysqlbinlog 常用参数:
- -d 指定特定数据库的binlog
- -r 相当于重定向到指定文件,与>、<作用相同
- –start-position–stop-position 按照指定位置解析binlog日志(精确),如不接–stop-positiion则一直到binlog日志结尾
- –start-datetime–stop-datetime 按照指定时间解析binlog日志(模糊,不准确),如不接–stop-datetime则一直到binlog日志结尾
开启 binlog 日志
如果未开启 binlog 日志的话,就需要开启 binlog 日志,在 MySQL 的配置文件中设置,如果你的是windowns 电
脑则找到 my.ini 文件,unix 系统找到 my.cnf文件。在文件中修改或者配置如下参数,之后重启 MySQL 服务器再次确认 binlog 日志开启成功。
my.ini配置:
#日志文件的名字及存储路径
log-bin=D:\Mysql-binlog\mysql-bin
#设置日志格式
binlog-format=mixed
其中 binlog-format 有三种选项:
-
STATMENT:每一条会修改数据的 SQL 语句会记录在 binlog 中。
-
ROW:不记录每一条 SQL语句的上下文信息,仅记录哪条记录被修改。
-
MIXED:以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的 SQL 语句选择日志保存方式。
其他:
恢复单条记录:
mysqlbinlog d:\Mysql-binlog\mysql-bin.000043 --start-position 710 --stop-position 996 | mysql -u root -p pingtouge;
恢复单表记录:
mysqlbinlog d:\Mysql-binlog\mysql-bin.000043 --start-position 393 --stop-position 1997 | mysql -u root -p pingtouge
恢复数据库记录:
mysqlbinlog d:\Mysql-binlog\mysql-bin.000043 --start-position 219 --stop-position 3861 | mysql -u root -p