关于mysql update语句忘加where 解析binlog日志恢复的问题

rabitsky 2016-12-19 10:00:09
大家好,最近在操作mysql时,update忘加where条件了,鉴于【使用最近全量备份 + 增量binlog日志】这种恢复模式费时费力,所以采用一种轻量级恢复模式,将binlog其解析为update之前的sql导入即可。限于本人shell水平有限,只能将binlog解析到【格式1】了,那么请问如何将【格式1】进一步解析为【格式2】呢?

注1:@1是主键,只根据主键即可完成恢复,WHERE后面其他字段,为了便捷我已删除
注2:字段说明,@1 = id, @2 = name, @3 = birth
注3:字段替换简单 sed 's/X/Y/g',难处是如何在SET后 @1 @2行尾加上逗号,如【格式2】

PS:本人查阅N多资料,奈何水平不够,理解不深,浪费不少精力,求大师指点,谢谢

【格式1】

UPDATE `sdypt`.`test1`
SET
@1=10
@2='chendong'
@3='1987:07:09'
WHERE
@1=10
@2='chendong'
@3='2011:11:11'
UPDATE `sdypt`.`test1`
SET
@1=11
@2='lucy'
@3='1988:08:10'
WHERE
@1=11
@2='lucy'
@3='2011:11:11'


【格式2】

UPDATE `sdypt`.`test1`
SET
@1=10,
@2='chendong',
@3='1987:07:09'
WHERE
@1=10;

UPDATE `sdypt`.`test1`
SET
@1=11,
@2='lucy',
@3='1988:08:10'
WHERE
@1=11;
...全文
289 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rucypli 2016-12-19
  • 打赏
  • 举报
回复
线程的工具 git clone https://github.com/danfengcao/binlog2sql.git pip install -r requiements.txt python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000047' $ python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000047' --start-pos=3346 --end-pos=3556 -B
rucypli 2016-12-19
  • 打赏
  • 举报
回复
去掉@1=用sed 's/@.*=//g' 结尾加分号用sed -r 's/(@63.*),/\1;/g'
rucypli 2016-12-19
  • 打赏
  • 举报
回复
UPDATE `sdypt`.`test1` SET @1=10 @2='chendong' @3='1987:07:09' WHERE @1=10 @2='chendong' @3='2011:11:11' 你的目标是要转化成 replace into `sdypt`.`test1` values( 10 'chendong' '1987:07:09');
致命的西瓜 2016-12-19
  • 打赏
  • 举报
回复
没看太懂,不过加逗号直接把‘’@‘’全局替换成‘’,@‘’不可以吗

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧