恢复阿里云RDS的数据备份文件到本地数据库

服务器

浏览数:211

2019-3-11

前言

  写之前先说说这篇文章的来由,公司客户准备发布一些活动,采用在线报名的方式,由于前期表结构设计的不合理,后期优化对表结构的改动,导致部分活动用户报名数据丢失,于是想恢复mysql被误删的数据,幸运的是RDS每天会自动备份数据文件,官方也提供了恢复云数据库mysql的备份文件到自建数据库的
文档,不再赘述,本文主要把恢复数据的过程记录下来,供大家参考:

前提条件

  • 本地mysql数据库安装在64位的Linux系统中,且与RDS的版本相同。
  • 操作系统中已安装数据恢复工具Percona XtraBackup 2.2.9或以上版本。
  • 操作系统中已安装数据备份文件解压工具rds_backup_extract.sh,点击下载

准备工作

  mysql安装不在赘述,主要与RDS版本相同即可,Percona XtraBackup安装官方也提供了详细的文档,按照步骤操作即可。本文采用Centos7,不同linux系统可查阅相应的文档。

系统版本  

安装percona-xtrabackup

安装依赖包

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

查看依赖包

yum list | grep percona

安装Percona XtraBackup

yum install percona-xtrabackup-22

下载RDS数据备份文件

  文档中有详细说明,按照文档下载需要恢复的文件即可,文件格式为.tar.gz压缩文件

开始恢复数据

  • 下载官方文档中提供的数据备份文件解压工具rds_backup_extract.sh,并添加可执行权限,解压数据备份文件。

  chmod +x rds_backup_extract.sh
  bash rds_backup_extract.sh -f <数据备份文件名>.tar.gz -C /var/backup

  • 执行如下命令,恢复解压好的备份文件,如果系统返回如下类似结果,则说明备份文件成功恢复到本地数据库

  innobackupex --defaults-file=/var/backup/backup-my.cnf --apply-log /var/backup

  • 修改文件属主,并确定文件所属为MySQL用户

  chown -R mysql:mysql /var/backup/

  • 修改/var/backup/backup-my.cnf,文档中修改内容如下:注释innodb_fast_checksum,innodb_page_size,innodb_log_block_size,但实际操作中启动mysql进程是报错:unknown variable *,所以做了一些修改:
  • 启动mysql进程

  mysqld_safe –defaults-file=/var/backup/backup-my.cnf –user=mysql –datadir=/var/backup/,需要注意/var/backup/ 目录有相应的权限,否则mysql启动会报错。

  • 登录mysql,文档中给出的命令为 mysql -uroot,但是登录时报错,,查看mysql日志文件:/var/backup/iZbp1f8l5dgkfqafh6rla0Z.err,mysql socket文件路径为/tmp/mysql.sock,mysql -uroot -S /tmp/mysql.sock,登录成功。
  • 导出数据:mysqldump -uroot -S /tmp/mysql.sock 数据库名称>/tmp/数据库名称.sql