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