Mysql通过Binlog恢复数据小记

2020-03-13  本文已影响0人  yellow_han

1、数据库需要开启bin-log

vim /etc/my.conf,配置完进行重启。
server-id   = 1 //mysql服务器的唯一标示
log_bin     = /var/log/mysql //存放二进制log文件的路径
#进入数据库,查看是否开启成功
show variables like '%log_bin%';
image.png

2、mysqlbinlog 常用命令

#查看log命令
mysqlbinlog /var/lib/mysql/mysql-bin.000001;
#导出
mysqlbinlog /var/lib/mysql/mysql-bin.000001  > /var/lib/mysql/000001.txt
#导出某段时间命令
mysqlbinlog --start-datetime='2020-03-13 00:00:00' --stop-datetime='2020-03-13 12:00:00' /var/lib/mysql/mysql-bin.000001  > /var/lib/mysql/000001.txt
#导出某段位置命令
mysqlbinlog --start-position='50' --end-position='100' /var/lib/mysql/mysql-bin.000001  > /var/lib/mysql/000001.txt
#重新生成bin-log
flush logs;
# 恢复到996位置
mysqlbinlog mysql-bin.000002 --stop-position=996 | mysql -u root -p password
# --database    与"-d"作用相同,用于指定数据
# -d    与“database”作用相同,用于指定数据库
# --start-datetime    起始时间点
# --stop-datetime    结束时间点
# --start-position    起始位置
# --stop-position    结束位置

3、binlog日志三种格式:分别为Statement、MiXED、ROW

1.Statement:每一条会修改数据的sql都会记录在binlog中。
2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。
3.Mixedlevel: 是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。

4、参考地址

https://my.oschina.net/xinson/blog/789386

上一篇 下一篇

猜你喜欢

热点阅读