binlog笔记

查看是否开启binlog且为ROW格式
show VARIABLES LIKE "%log_bin%"
#日志是否开启 on为开启
log_bin
#归档日志路径
log_bin_basename
log_bin_indexlog_bin_index
查看是否为row 格式
show variables like 'binlog_format';

【新增一个log记录文件】
flush LOGS;
【查看当前正在写入的binlog文件】
show master status

【查询所需要恢复的事件起止的位置】
show binlog EVENTS in "binlog.000020";
下面是插入三条数据 恢复这三条就是 开始的 311 到结束的 1011

------(应该从set开始,到时试试)

【执行恢复】----(我这里貌似表要有主键才能恢复成功)
/usr/bin/mysqlbinlog --no-defaults --start-position=311 --stop-position=1011 "/var/lib/mysql/binlog.000020" | mysql -u root -p melon
恢复所有
/usr/bin/mysqlbinlog --no-defaults "/var/lib/mysql/binlog.000020" | mysql -u root -p melon(库名)

【二进制的log归档日志解析成可读的sql文件】-----按条件筛选出来然后恢复
导出可以导入数据库的sql文件
/usr/bin/mysqlbinlog --no-defaults "/var/lib/mysql/binlog.000027" -d test(库名要小写) --skip-gtids --start-position=311 --stop-position=1011 >test.sql (库名小写后应该也ok)
/usr/bin/mysqlbinlog --no-defaults "/var/lib/mysql/binlog.000002" >test9.sql (我用这个导出的sql文件是可以用的)
指定库 或者 指定表 或者指定时间段 的 日志导出sql文件
https://wk.baidu.com/view/6cb193ea8aeb172ded630b1c59eef8c75fbf9598
变成人类可以查看的文件
/usr/bin/mysqlbinlog --no-defaults "/var/lib/mysql/binlog.000027"
/usr/bin/mysqlbinlog binlog.000001 --base64-output=decode-rows -vv



【导入数据库(数据恢复)】
进入数据库相关命令见: https://www.cnblogs.com/kaibindirver/p/16258194.html
mysql -u root -p;
show databases;
use 库名
source /var/lib/mysql/test9.sql (进入数据库后,直接这个也可以导入成功)
B站参考: https://www.bilibili.com/video/BV1ur4y1w7N6?p=20&spm_id_from=pageDriver&vd_source=caabcbd2a759a67e2a3de8acbaaf08ea
参考: https://www.jb51.net/article/250499.htm
遇到的问题:
https://blog.csdn.net/weixin_30653023/article/details/97382440 (里面还有其他问题不错,下面这个我亲测ok)

mysqldocker配置文件位置在
mysql 配置文件在 /etc/mysql
修改 my.cnf 文件 如果binlog没开启1就要像下面一样修改配置
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
server_id = 1
max_connections=1024
lower_case_table_names=1
log_bin_trust_function_creators=1
log-bin=mysql-bin
binlog_format=row
expire_logs_days=7
default-time-zone='+08:00'
# Custom config should go here
!includedir /etc/mysql/conf.d/
修改后重启
命令行操作mysql见 https://www.cnblogs.com/kaibindirver/p/16258194.html
过滤库命报错解决
https://blog.csdn.net/u014180504/article/details/77332003
/usr/bin/mysqlbinlog --no-defaults --skip-gtids -d mytest "/var/lib/mysql/binlog.000002">test18.sql
注意,在binlog里面 库名和表名都是小写的

----------------------------------------------------------------5.7的mysql左右 的操作--------------------------------------------
误操作 更新、删除、新增的可以参考
https://www.cnblogs.com/gslgb/p/13210800.html
https://github.com/danfengcao/binlog2sql (这个是python写的脚本可以解析出sql 和 回滚的sql)
出现 python 连接 mysql KeyError: 255问题解决
用上面库遇到的问题见: https://blog.csdn.net/Interest1_wyt/article/details/124217711
python2 运行出现LookupError:unknown encoding:ascii”解决
http://cn.voidcc.com/question/p-achmlpqa-zu.html
pip用不了用 python -m pip 替代
最后用docker起了个5.7的mysql就成功了,估计8的mysql不行
python3 binlog2sql.py -h127.0.0.1 -P3317 -uroot -p'123456' -dtest -t manbig --start-file='mysql-bin.000002'


根据时间范围筛选--指定库 表 误操作的sql
python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -t test3 test4 --start-datetime="2020-6-28 12:00:00" ----stop-datetime="2020-6-28 15:00:00"--start-file='mysql-bin.000002'
解析回滚sql
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -padmin -d数据库名 -t表名 --start-file='binlog.000011' --start-position=2213 --stop-position=2612 -B > /back.sql
更多参数见github(上面有地址)
查看所有日志文件
SHOW BINARY logs;

浙公网安备 33010602011771号