陈奇网络工作室

使用binlog2sql恢复数据

系统运维

误删除数据的话,甲骨文里面我们可以使用闪回功能找回误操作的数据。

在关系型数据库里面,如果我们有延迟从库的话,也可以找回之前的数据,但是有时候不太好使(因为追数据到误操作前的准确的时间点有时候也不太好把握)。

对于误操作数据的闪回,我们一般推荐binlog2sql或者MyFlash(美团点评开源的)

本篇文章,我们介绍下binlog2sql的用法:

binlog2sql首级推荐使用】

官网:https://github。曹/binlog 2 SQL

注意:binlog必须是排格式,并且是全部类型的记录。

安装:

好吃吗?更新?nss?卷曲?libcurl?-是吗?#?centos6需要升级下这个包,不然没法去开源代码库拉代码

cd?/root/

饭桶?克隆?https://github.com/danfengcao/binlog2sql.git?cd?binlog2sql

皮普。安装?-r?requirements.txt

授权:

?格兰特?选择,复制?奴隶?复制?客户?开?*.*?去哪?\\\ '闪回\\\'@\\\'192.168.11.20\\\ '确定了?被谁?\ \ \ '管理\ \ \

使用testdb

[testdb]SELECT * FROM t _ stud WHERE name LIKE \ \ \ ' Y % \ \ \ '

——- ————— — —— ——— ———

| StuID | Name?年龄|性别| ClassID |教师ID |

——- ————— — —— ——— ———

|?5 |余?|?26 | M?|?3 |?1 |

|?10 |李灵珊?|?19 | F?|?3 |?NULL |

|?11 |约翰成志|?23 | M?|?6 |?NULL |

——- ————— — —— ——— ———

[测试数据库]更新t_stud设定年龄=100,其中名称类似于\ \ \ ' Y % \ \ \?— 看到有3行受到影响

查询正常,3行受影响(0.01秒)

匹配的行数:3?变了:3?警告:0

[testdb]SELECT * FROM t _ stud WHERE name LIKE \ \ \ ' Y % \ \ \ '

——- ————— — —— ——— ———

| StuID | Name?年龄|性别| ClassID |教师ID |

——- ————— — —— ——— ———

|?5 |余?| 100 | M?|?3 |?1 |

|?10 |李灵珊?| 100 | F?|?3 |?NULL |

|?11 |约翰成志| 100 | M?|?6 |?NULL |

——- ————— — —— ——— ———

解析出标准SQL:

cd?/root/?

先用Mysqlbinlog找到误操作的那个地方binlog文件及位移点,然后使用下面命令解析:

python?/root/bin log 2 SQL/bin log 2 SQL/bin log 2 SQL。py?-h292.168.11.20?-P3306?-乌发拉什巴克?-p\\\'admin\\\ '-迪?testdb?-t?t_stud?-start-file=\ \ \ ' MYSQL-bin。000040 \ \ \ '-起始位置=10030?-停止位置=10334

一解析出回滚SQL:

cd?/root/?

python?/root/bin log 2 SQL/bin log 2 SQL/bin log 2 SQL。py?闪回?-h292.168.11.20?-P3306?-乌发拉什巴克?-p\\\'admin\\\ '-迪?testdb?-t?t_stud?-start-file=\ \ \ ' MySQL-bin。000040 \ \ \ '-起始位置=10030?-停止位置=10334

解析出的结果类似这样:

更新?` testdb`.`t _ stud `?设置?` StuID`=11,` Name`=\\\ '约翰?诚志\\\ '"年龄`=23,` Gender`=\\\'M\\\ '` ClassID`=6,` teacheid `=NULL?在哪里?` StuID`=11?然后呢' Name`=\\\ '约翰?诚志\\\ '然后呢。`年龄`=100?然后呢. `性别`=\\\'M\\\ '然后呢` ClassID`=6?然后呢。"教师ID”?是吗?NULL?极限?1;#开始?10030?结束?10334?时间?2018-07-15?14:17:58

更新?` testdb`.`t _ stud `?设置?` StuID`=10,` Name`=\\\ '李?灵山\\\ '"年龄`=19,` Gender`=\\\'F\\\ '` ClassID`=3,` teacheid `=NULL?在哪里?` StuID`=10?然后呢' Name`=\\\ '李?灵山\\\ '然后呢。`年龄`=100?然后呢. `性别`=\\\'F\\\ '然后呢` ClassID`=3?然后呢。"教师ID”?是吗?NULL?极限?1;#开始?10030?结束?10334?时间?2018-07-15?14:17:58

更新?` testdb`.`t _ stud `?设置?` StuID`=5,` Name`=\\\ '余?\ '吴彤?"年龄`=26,` Gender`=\\\'M\\\ '` ClassID`=3,` teacheid `=1?在哪里?` StuID`=5?然后呢' Name`=\\\ '余?吴彤\\\ '然后呢。`年龄`=100?然后呢. `性别`=\\\'M\\\ '然后呢` ClassID`=3?然后呢. teacheid `=1?极限?1;#开始?10030?结束?10334?时间?2018-07-15?14:17:58

2修复下数据,去掉结尾的#及后面的内容:

sed?-i.bak\\\'s/# .*//g\\\ '/root/rollback.sql

3将数据恢复到数据库中:

使用?testdb?

更新?` testdb`.`t _ stud `?设置?` StuID`=11,` Name`=\\\ '约翰?诚志\\\ '"年龄`=23,` Gender`=\\\'M\\\ '` ClassID`=6,` teacheid `=NULL?在哪里?` StuID`=11?然后呢' Name`=\\\ '约翰?诚志\\\ '然后呢。`年龄`=100?然后呢. `性别`=\\\'M\\\ '然后呢` ClassID`=6?然后呢。"教师ID”?是吗?NULL?极限?1;

更新?` testdb`.`t _ stud `?设置?` StuID`=10,` Name`=\\\ '李?灵山\\\ '"年龄`=19,` Gender`=\\\'F\\\ '` ClassID`=3,` teacheid `=NULL?在哪里?` StuID`=10?然后呢' Name`=\\\ '李?灵山\\\ '然后呢。`年龄`=100?然后呢. `性别`=\\\'F\\\ '然后呢` ClassID`=3?然后呢。"教师ID”?是吗?NULL?极限?1;

更新?` testdb`.`t _ stud `?设置?` StuID`=5,` Name`=\\\ '余?\ '吴彤?"年龄`=26,` Gender`=\\\'M\\\ '` ClassID`=3,` teacheid `=1?在哪里?` StuID`=5?然后呢' Name`=\\\ '余?吴彤\\\ '然后呢。`年龄`=100?然后呢. `性别`=\\\'M\\\ '然后呢` ClassID`=3?然后呢. teacheid `=1?极限?1;

执行完后,再次看下数据,可以看到已经恢复好了。

[testdb]select * from t _ stud where name like \ \ \ ' Y % \ \ \ '????????

——- ————— — —— ——— ———

| StuID | Name?年龄|性别| ClassID |教师ID |

——- ————— — —— ——— ———

|?5 |余?|?26 | M?|?3 |?1 |

|?10 |李灵珊?|?19 | F?|?3 |?NULL |

|?11 |约翰成志|?23 | M?|?6 |?NULL |

——- ————— — —— ——— ———

补充:

解析模式:

永不停止持续同步宾洛格。可选。不加则同步至执行命令时最新的binlog位置。

-K,-无主键对插入语句去除主键。可选。

第二,闪回生成回滚语句,可解析大文件,不受内存限制,每打印一千行加一句睡眠选择(1).可选。与永不停止或无主键不能同时添加。

解析范围控制:

开始文件起始解析文件。必须。

开始位置/开始位置开始文件的起始解析位置。可选。默认为开始文件的起始位置。

停止文件/结束文件末尾解析文件。可选。默认为开始文件同一个文件。若解析模式为永远不要停止,此选项失效。

停止位置/结束位置停止文件的末尾解析位置。可选。默认为停止文件的最末位置;若解析模式为永远不要停止,此选项失效。

开始日期时间从哪个时间点的binlog开始解析,格式必须为日期时间,如\\\'2016-11-11 11:11:11\\\'可选。默认不过滤。

停止日期时间到哪个时间点的binlog停止解析,格式必须为日期时间,如\\\'2016-11-11 11:11:11\\\'可选。默认不过滤。

对象过滤:

-d,-数据库只输出目标的sql。可选。默认为空。

-t,-表格只输出目标桌子的sql。可选。默认为空。

注意:

提取出来的结构化查询语言实际上是倒序的。

例如误操作的结构化查询语言是如下2步:2018101916 — 11 — 12

第0步:原始一种网络的名称(传输率可达1.54mbps)级(一种通讯线路的名称)表的work_id=\\\'2018101916\\\ '

步骤1:更新测试. t1设置work_id=\\\'11\\\ '其中id=32限制1;# 简单实验,更新不更新其它列的数据

第二步:更新测试. t1设置work_id=\\\'22\\\ '其中id=32限制1;# 简单实验,更新不更新其它列的数据

闪回出来的结构化查询语言是这样的:12 — 11 — 2018101916

更新` test`.`t1` SET `id`=32,` work_id`=\\\'11\\\ '` username `=\ \ \ ' admin \ \ \ ' LIMIT 1。

更新` test ` . ` t1 ' SET ` id `=32,` work_id`=\\\'2018101916\\\ '` username `=\ \ \ ' admin \ \ \ ' LIMIT 1;

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理商官网:www.chenqinet.cn

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3