【mysqlbinlog 恢复数据】

不小心把数据删掉了 
首先要拿到binlog文件 命令行执行

/usr/local/mysql/bin/mysqlbinlog --base64-output=decode-rows --start-datetime="2023-05-19 09:01:32" --stop-datetime="2023-05-19 09:01:35" -v /Users/zylong/Downloads/mysql-bin.003178 --result-file=/Users/zylong/desktop/update.txt

/usr/local/mysql/bin/mysqlbinlog是你的mysqlbinlog所在的目录 如果你设置了环境变量可以不加全路径

 --base64-output=decode-rows base64输出行

 --start-datetime --stop-datetime 起止时间 具体去看binlog里想恢复的时间 如下图的230519 9:01:33 上述两个时间遵循左开右避原则
也可以使用at 具体到行 可以自行百度看看

 -v /Users/zylong/Downloads/mysql-bin.003178   -v 你的目标文件路径

 --result-file= 输出到指定文件

以下是logbin文件信息

执行上述命令后打开目标txt文件 显示大概如下

cat /Users/zylong/desktop/update.txt


 

然后 执行以下命令

cat /Users/zylong/desktop/update1.txt | sed -n '/### /p;/# at/p' | sed 's/### //g;s/DELETE FROM/INSERT INTO/g;s/WHERE/(ID, departname, description, parentdepartid, org_code, org_type, mobile, fax, address, depart_order, home_dep, is_contrast, total_contrast_number, total_observer_number, total_matched_number, contrast_mirror, current_contrast_number, illness, region_id, is_self_control, main_logo, is_bindable_wx, sms_template, sms_request_template, is_case_center)  VALUES(/g;s/@1=//g;s/[0-9]=//g;s/@[0-9]/,/g;s/@/,/g;s/# at/);\n# at/g' | sed -e '/# at/d' >  /Users/zylong/desktop/t6.txt

以上命令是sed 替换文本操作 不会的可以自己去看看 其实就是替换文本没啥难的 随便看看就明白了 

以上分五部分依次是源文件 显示行 替换操作 删除操作 目标文件

/Users/zylong/desktop/update1.txt 源文件

其中红色以及黄色标注中的;表示匹配多个 如果你还有额外的需求可以再添加一个匹配或规则

sed -n '/### /p;/# at/p'

-n 表示源文件中显示的行 我们只需要sql相关的文件 所以只需要/### 开头的文件 但是我们替换的时候需要在每个sql命令后加上); 所以用到了/# at开头的行

1,s/### //g;

2,s/DELETE FROM/INSERT INTO/g; 

3,s/WHERE/(ID, departname, description, parentdepartid, org_code, org_type, mobile, fax, address, depart_order, home_dep, is_contrast, total_contrast_number, total_observer_number, total_matched_number, contrast_mirror, current_contrast_number, illness, region_id, is_self_control, main_logo, is_bindable_wx, sms_template, sms_request_template, is_case_center) VALUES(/g;

4,s/@1=//g;

5,s/[0-9]=//g;

6,s/@[0-9]/,/g;

7,s/@/,/g

8,s/# at/);\n# at/g; 

2,3 操作其实就是连成一个 insert into xxx (字段1,字段2...) values(

4 把第一个参数前的数据完全替换 

5替换以数字开始=结尾的数据 替换成空字符

6,7 将@以及数字替换成,

8,将/# at 替换成分);# at \n表示换行 /g表示匹配多个 下同 其中/# at后面的/表示分开符号 如果要使用/请先转译

sed -e '/# at/d'  删除包含“# at”的行

上述操作输出后大概就是这样

        insert into xxx (字段1,字段2...) values('1','2',...);

        insert into xxx (字段1,字段2...) values('1','2',...);

> 表示输出到目标文件

/Users/zylong/desktop/t6.txt 目标文件

复制上述输出文件的内容 运行之后数据就恢复了
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值