欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql binlog 恢复数据

程序员文章站 2022-05-02 16:32:37
...

环境:阿里云 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

更新工具提取原来的值

mysql binlog 恢复数据

需要注意的是时间类型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