收到公司产品人员消息,让我恢复一个表的数据
通过了解系统是公司很多年前的一个老系统,面向美国用户的,数据库是阿里云的rds 所在区为美国弗吉尼亚mysql版本为5.6,产品在update操作时候字段名称写错了,把一个字段值覆盖掉了
UPDATE tab_xxxx set imgxx=REPLACE(zip_linkxx,"aaa","bbb.com") where img like "%bbb.bb%"
找操作人员询问了执行的语句,执行的大概时间点,要到rds登录方式等
1.第一想到的恢复方法是通过binlog日志进行恢复
登录rds控制台在备份恢复的日志备份中找binlog 发现binlog每4个小时备份一次,需要的日志没有下载列表
2.既然需要的日志,是不是可以通过全备进行恢复整个表(由于是老系统这表基本不会更新),不过看到全备的文件压缩后30多个G就放弃这种方法(30G下载就需要很长时间了)
3.第三种方法远程获取binlog日志 mysqlbinlog --read-from-remote-server
远程获取Binlog日志
通过客户端连接实例,执行如下SQL语句,查看并记录logs表中的Log_name列值,该值即为Binlog日志文件名,例mysqlbin.xxx。
show binary logs;(确定要获取哪一个binlog日志文件)
根据上一步获取的Binlog文件名,在客户端执行如下命令,远程获取Binlog日志并保存至本地。
./mysql-5.6.40-linux-glibc2.12-x86_64/bin/mysqlbinlog -uxxx -p'xxx' -h'xx.xx.xx' --read-from-remote-server mysql-bin.001120 > mysql-bin.001120
./mysql-5.6.40-linux-glibc2.12-x86_64/bin/mysqlbinlog -uxxx -p'xxx' -h'xx.xx.xx' --read-from-remote-server mysql-bin.001120 > mysql-bin.001120(这一步是在其他ecs服务器上执行的,要把ecs服务器加入到rds白名单中)
按照阿里云给的步骤获取的日志进行解析,报错
[root@ops_server01 ww]# ./mysql-5.6.40-linux-glibc2.12-x86_64/bin/mysqlbinlog -vv --base64-output=DECODE-ROWS mysql-bin.001120 > 1120.sql
ERROR: File is not a binary log file.
原因是远程获取日志没有以二进制日志格式方式来保留日志解析不了,还是不能进行恢复
最后通过远程获取时加 -vv进行解析重定向到文件中
./mysql-5.6.40-linux-glibc2.12-x86_64/bin/mysqlbinlog -uxxx -p'xxx' -h'xx.xx.xx.xx' -vv --read-from-remote-server mysql-bin.001120 > ww.sql
### UPDATE `xx`.`xx`
### WHERE
### @1=41 /* INT meta=0 nullable=0 is_null=0 */
### @2='Mask Ⅲ' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
### @3=1 /* TINYINT meta=0 nullable=1 is_null=0 */
### @4='http://ec2user.res.xxx.com/upload/zip/201708/sticker_g244/sticker_thumb.jpg' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
### @5=0 /* TINYINT meta=0 nullable=1 is_null=0 */
### @6=1 /* TINYINT meta=0 nullable=1 is_null=0 */
### @7='' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
### @8=1476946736 /* INT meta=0 nullable=1 is_null=0 */
### @9='yangy' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
### @10=183 /* INT meta=0 nullable=1 is_null=0 */
### @11='http://ec2user.resxx.com/upload/zip/201708/sticker_g244.zip' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
### @12='' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
### @13=0 /* INT meta=0 nullable=1 is_null=0 */
### @14=1 /* TINYINT meta=0 nullable=1 is_null=0 */
### @15=0 /* INT meta=0 nullable=1 is_null=0 */
### SET
### @1=41/* INT meta=0 nullable=0 is_null=0 */
### @2='Mask Ⅲ' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
### @3=1 /* TINYINT meta=0 nullable=1 is_null=0 */
### @4='http://ec2user.res.xxxx.com/upload/zip/201708/sticker_g244/sticker_thumb.jpg' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
### @5=0 /* TINYINT meta=0 nullable=1 is_null=0 */
### @6=1 /* TINYINT meta=0 nullable=1 is_null=0 */
### @7='' /* VARSTRING(765) meta=765 nullable=1 is_null=0 */
### @8=1476946736 /* INT meta=0 nullable=1 is_null=0 */
### @9='yangy' /* VARSTRING(90) meta=90 nullable=1 is_null=0 */
### @10=183 /* INT meta=0 nullable=1 is_null=0 */
### @11='http://ec2user.res.xxs.com/upload/zip/201708/sticker_g244.zip' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
### @12='' /* VARSTRING(300) meta=300 nullable=1 is_null=0 */
### @13=0 /* INT meta=0 nullable=1 is_null=0 */
### @14=1 /* TINYINT meta=0 nullable=1 is_null=0 */
### @15=0 /* INT meta=0 nullable=1 is_null=0 */
最后通过脚本处理解析的文件(之前写的脚本),生产回滚的语句,在数据库直接执行就可以了
UPDATE `xx`.`xxx`
set
id=168 ,
name='Blusher' ,
pid=10 ,
img='http://ec2user.res.xxx.com/upload/zip/201708/sticker_g168.zip' ,
type=0 ,
publish=1 ,
txt='' ,
addtime=1502689653 ,
operate='chenghao'
orderval=179 ,
zip_link='http://ec2user.res.xx.com/upload/zip/201708/sticker_g168.zip' ,
big_img='http://ec2user.res.xx.com/upload/img/201708/Blushernew.jpg' ,
coin=0 ,
fid=1 ,
rate=0
where
id=168 and
name='Blusher' and
pid=10 and
img='http://ec2user.res.xx.com/upload/img/201708/Blushernew.jpg' and
type=0 and
publish=1 and
txt='' and
addtime=1502689653 and
operate='chenghao' ;
orderval=179 ,
zip_link='http://ec2user.res.xxx.com/upload/zip/201708/sticker_g168.zip' ,
big_img='http://ec2user.res.xx.com/upload/img/201708/Blushernew.jpg' ,
coin=0 ,
fid=1 ,
rate=0 ;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。