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;

posted @ 2022-08-01 14:10  凯宾斯基  阅读(86)  评论(0)    收藏  举报