mysql故障记录以及binlog2sql学习使用

mysql两次故障记录(centos7.4和7.5)

一、故障描述:

故障一:

mysql主库的vip漂移到了备库,20分钟后后人工切换了回来,由于不是主主同步模式,所以主库缺失了这写入备库的20分钟的数据。

故障二:

有人员误删生产库中某个表的几百条数据,传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据。此法费时费力,并不适合快速回滚

解决:使用工具:binlog2sql

优点用途:
主从切换后,数据不一致修复
数据快速回滚(闪回)
从binlog生成标准SQL

二、binlog2sql安装

注:在root用户下执行
#首先安装pip和git
yum -y install epel-release
yum -y install git  python-pip
如果是内网环境,先从网上下载setuptools和pip的包,我这里使用的是pip-1.5.5和setuptools-23.1.0(因为系统是python2.7.5)
 ①解压
 ②cd setuptools-23.1.0 && python setup.py install
 ③cd pip-1.5.5 && python setup.py install
 
#下载binlog2sql
git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
pip install -r requirements.txt
(或pip install  --no-index --find-link=binlog2sql/package -r binlog2sql/binlog2sql-master/requirements.txt)

安装成功!

三、binlog2sql的使用

1.可用参数
可用参数

#mysql连接配置
-h host; -P port; -u user; -p password
解析模式
--stop-never 持续同步binlog。可选。不加则同步至执行命令时最新的binlog位置。
-K, --no-primary-key 对INSERT语句去除主键。可选。
-B, --flashback 生成回滚语句,可解析大文件,不受内存限制,每打印一千行加一句SLEEP SELECT(1)。可选。与stop-never或no-primary-key不能同时添加。
#解析范围控制
--start-file 起始解析文件。必须。
--start-position/--start-pos start-file的起始解析位置。可选。默认为start-file的起始位置。
--stop-file/--end-file 末尾解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。
--stop-position/--end-pos stop-file的末尾解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。
--start-datetime 从哪个时间点的binlog开始解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。
--stop-datetime 到哪个时间点的binlog停止解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。
#对象过滤
-d, --databases 只输出目标db的sql。可选。默认为空。
-t, --tables 只输出目标tables的sql。可选。默认为空。
2.操作1:使用binlog2sql生成标准sql
python binlog2sql.py -uuser -h127.0.0.1 -ppasswd -d(指定库名) -t(指定表) --start-file='mysql-bin.000107(指定日志文件)' > standard.sql
这样刚刚执行的sql语句都能生成出来了  -d -t 都为可选项,为了定位数据操作
3.操作2:使用binlog2sql生成反向sql,这样就可将误删除的数据直接insert插入回去了。 -B参数(flashback)
python binlog2sql.py -u(+用户) -h127.0.0.1 -p(+密码) -d(+指定库名库) --start-file='mysql-bin.000107' -B  > rollback.sql 

#一次生产中使用的命令加参数:将时间点内误删除的操作生成反向sql
python binlog2sql.py  -h127.0.0.1 -P3306 -uroot -pxxxx -dxxxx -txxxxx --start-file='mysql-bin.002954' --start-datetime='2021-07-27 19:40:00' --stop-datetime='2021-07-27 19:59:18'  -B  > rollback02.sql

如过想要将rollback02.sql中的语句都直接执行一下,直接mysql -uroot -pxxxx -d(指定库) -t(指定表) <./rollback_tb1.sql

!!! drop table 和truncate table无法生成反向sql 。数据恢复时可先创建表结构(从备份导出表结构)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值