系统运维
误删除数据的话,甲骨文里面我们可以使用闪回功能找回误操作的数据。
在关系型数据库里面,如果我们有延迟从库的话,也可以找回之前的数据,但是有时候不太好使(因为追数据到误操作前的准确的时间点有时候也不太好把握)。
对于误操作数据的闪回,我们一般推荐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