序言:
在生产环境或测试环境中由于各种缘故原由导致误删除数据,造成数据的丢失,
场景:
今早刚到公司,沏好茶,就看到开拓的乞助信息,细问之后,原来某开拓职员操作线上RDS数据库时误删除某租户id下的店铺信息(由于订单表字段太大,以是本次示例就用店铺表作为演示)
思路:
可以通过MySQL数据库的binlog日志信息对用户操作的DML事务进行回滚,但条件是MySQL须要打开binlog日志信息
实践:
1、误删除数据演示
mysql>use ht_xxxx_01
mysql>delete from `ht_eshop` WHERE `tenantry_id` = \公众86516\公众 and id = \公众29063\"大众
2、向运维供应操作的详细韶光范围(越精确越好)及实行的SQL语句
实行韶光段:2018-09-03 11:00~2018-09-03 11:19
实行的库:ht_xxxx_01
实行sql:delete from `ht_eshop` WHERE `tenantry_id` = \"大众86516\"大众 and id = \公众28615\"大众
3、运维通过韶光下载binlog文件,一样平常binlog大小为200M,可自定义设置
1)通过show master status;确定当前的binlog日志文件及GTID
2)获取binlog二进制日志文件。
如果是本地日志文件,可直接获取
如果是远端做事器可通过主从同步办法获取:
mysqlbinlog -u -p'' -h'' -P3306 --read-from-remote-server --raw mysql-bin.001578 >t.binlog
命令解读可以通过mysqlbinlog --read-from-remote-server --help
把稳:必须利用raw模式,否则获取的binlog日志中无数据变更信息
4、处理mysqlbinlog日志信息,截取相应事宜,抽取delete操作日志
截取韶光段日志的手段有多种,可以通过--start-time或者利用sed过滤,本文通过sed进行截取
[root@iZbp18p3a0dhy9yoki70jtZ elk]# mysqlbinlog -v --base64-output=decode-rows mysql-bin.001578|sed -n '/2018-09-03 11:44/,/2018-09-03 11:46/'p >s.binlog
过滤相应的sql语句,抽取干系sql操作信息
[root@iZbp18p3a0dhy9yoki70jtZ elk]# cat s.binlog |grep -A 30 \公众DELETE FROM \`ht_maijiayun_01\`.\`ht_eshop\`\公众
### DELETE FROM `xxx`.`ht_eshop`
### WHERE
### @1=29063
### @2=86516
### @3='100'
### @4='100|ERP_TEST_SHOP_02'
### @5='name'
### @6='00002'
### @7='开放平台测试店铺-描述信息'
### @8=''
### @9=''
### @10=0
### @11='2017-12-29 10:16:37'
### @12='2018-02-05 15:13:30'
### @13=0
### @14='2017-12-29 10:16:41'
### @15=NULL
### @16=NULL
### @17=0
### @18=0
### @19=1
### @20=''
### @21=''
### @22=''
### @23=''
# at 159639188
#180903 11:45:29 server id 1504283078 end_log_pos 159639219 CRC32 0xb87aef1e Xid = 4437015247
COMMIT/!/;
# at 159639219
#180903 11:45:29 server id 1504283078 end_log_pos 159639267 CRC32 0x072ef225 GTID last_committed=0 sequence_number=0 rbr_only=no
SET @@SESSION.GTID_NEXT= '88ba2b9a-93ce-11e7-9c03-7cd30ab8a81c:253639198'/!/;
5、生产insert语句
我们有了DML操作的详细信息,那么就可以生产insert语句重新插入,生产insert语句的办法有多种,例如自写脚本生产into语句、利用工具生产语句
INSERT INTO `ht_eshop` (`id`,`tenantry_id`,`b2c_identifier`,`b2c_code`,`seller_nick`,`title`,`description`,`bulletin`,`memo`,`is_distribution`,`create_time`,`modify_time`,`goods_total_num`,`goods_sync_time`,`order_request_time`,`order_sync_time`,`import_status`,`deleted`,`enable`,`contactor_name`,`contactor_mobile`,`contactor_telephone`,`address`) VALUES (29063,86516,'100','100|ERP_TEST_SHOP_02','name','00002','开放平台测试店铺-描述信息','','',0,'2017-12-29 10:16:37','2018-02-05 15:13:30',0,'2017-12-29 10:16:41',NULL,NULL,0,0,1,'','','','');
Laravel开拓
PHP开拓
Linux
Mysql
ThinkPHP
Redis
思梦PHP
Html
微信开拓
杂技
PHP视频
其他