mysql binlog 恢复数据

环境:阿里云 RDS数据库 ,开通了binlog

 

一个坑 (中途接手的项目)

表结构中加上 ON UPDATE CURRENT_TIMESTAMP

`CREATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间'

增加一个字段后同意更新发现CREATE_TIME的时间也被更新

解决问题:

修改字段

alter table t_xxxx modify column `CREATE_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP  COMMENT '时间'

根据时间查找对应的binlog数据,并下载到本地

mysqlbinlog --no-defaults -vv --base64-output=decode-rows 日志文件名 -r 保存文件名

D:\Downloads>mysqlbinlog --no-defaults -vv --base64-output=decode-rows mysql-bin.000239 -r my.sql

mysqlbinlog : 安装mysql的bin目录下就有,需要注意版本号

https://help.aliyun.com/knowledge_detail/41709.html

更新工具提取原来的值

需要注意的是时间类型TIMESTAMP

update t_xxxxx set CREATE_TIME=FROM_UNIXTIME(1513993596) where ID=1;

最后执行sql就恢复数据了,这里只修改了CREATE_TIME

UNIX_TIMESTAMP 和 FROM_UNIXTIME  一般是用于unix的时间戳。

例子:

SELECT UNIX_TIMESTAMP("2016-07-11")
-- 1468166400
SELECT UNIX_TIMESTAMP("2016-07-17 23:59:59")
-- 1468771199

FROM_UNIXTIME:表示把UNIX_TIMESTAMP还原成标准的时间格式

SELECT FROM_UNIXTIME(1468166400),FROM_UNIXTIME(1468771199)

 

出现的错误

D:\Downloads>mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000239 -r my.sql
mysqlbinlog: [ERROR] unknown option '--no-beep'

解决方式:

D:\Downloads>mysqlbinlog --no-defaults -vv --base64-output=decode-rows mysql-bin.000239 -r my.sql

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值