跳转至

使用 xtrabackup 恢复RDS备份数据


2016-07-04 by dongnan

目标

  • 使用 docker 容器,恢复阿里云 rds 备份数据,优势是恢复备份数据后,可直接删除容器不影响宿主机系统。
  • 阿里云rds 使用 xtrabackup 备份 Mysql 数据,学习 xtrabackup 恢复数据。

环境

宿主机: ubuntu 14.04 amd64
运行时: docker 1.9.x
容器镜像: CentOS 7 amd64

操作步骤

宿主机

# 执行命令
ls /home/docker
hins1335211_xtra_20160523230054.tar.gz  percona-xtrabackup-24-2.4.3-1.el6.x86_64.rpm  rds_backup_extract.sh

文件说明

  • rds_backup_extract.shrds备份专用的解压脚本文件。
  • hins1335211_xtra_20160523230054.tar.gz ,使用 xtrabackup 备份 rds 的备份文件。
  • percona-xtrabackup-24-2.4.3-1.el6.x86_64.rpmxtrabackup 安装文件。

容器

创建容器

# 这个容器挂载了 /home/docker 目录
docker run --name test -tid -v /home/docker/:/docker/ centos:7

进入容器控制台

# 执行命令
docker exec -ti test /bin/bash

安装 xtrabackup

# 执行命令
cd /docker
yum localinstall percona-xtrabackup-24-2.4.3-1.el6.x86_64.rpm

解压备份文件

# mysql数据目录
mkdir -p /data/mysql

# 执行恢复脚本
sh rds_backup_extract.sh -f hins1335211_xtra_20160523230054.tar.gz -C /data/mysql/

Extracting to /data/mysql/...
./backup-my.cnf
ibdata1
mysql/slave_worker_info.ibd
#...省略
./xtrabackup_slave_info
./xtrabackup_slave_filename_info
./xtrabackup_binlog_info
./log000000000002.tokulog27
./tokudb.rollback
./tokudb.directory
./tokudb.environment
./xtrabackup_info
xtrabackup_logfile
xtrabackup_checkpoints
Done.

恢复数据文件

阿里云RDS MySQL 使用开源软件 percona-Xtrabackup 对 MySQL 数据库进行备份。需要下载并安装该软件然后使用该软件进行恢复操作。

# 执行命令
innobackupex --defaults-file=/data/mysql/backup-my.cnf --apply-log /data/mysql/

160524 07:19:31 innobackupex: Starting the apply-log operation
#...省略
innobackupex version 2.4.3 based on MySQL server 5.7.11 Linux (x86_64) (revision id: 6a46905)
xtrabackup: cd to /data/mysql
xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1
xtrabackup: xtrabackup_logfile detected: size=8388608, start_lsn=(850279632)
#...省略.
InnoDB: Renaming log file ./ib_logfile101 to ./ib_logfile0
InnoDB: New log files created, LSN=850285186
#...省略
InnoDB: Starting crash recovery.
InnoDB: Removed temporary tablespace data file: "ibtmp1"
InnoDB: Creating shared tablespace for temporary tables
#...省略
InnoDB: Shutdown completed; log sequence number 850295933
160524 07:19:59 completed OK!

修改配置文件 由于存在的版本问题,请将解压文件 backup-my.cnf 中的不需要的参数注释掉,例如:

# This MySQL options file was generated by innobackupex.

# The MySQL server
[mysqld]
#innodb_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=1048576000
#innodb_page_size=16384
#innodb_undo_directory=.
#innodb_undo_tablespaces=0
#rds_encrypt_data=OFF

修改文件属主

# 执行命令
chown -R mysql:mysql /data/mysql/
# 如果没有mysql用户则需要添加
useradd mysql

启动服务器

# 执行命令
mysqld_safe --defaults-file=/data/mysql/backup-my.cnf --datadir=/data/mysql --user=mysql  &

[1] 229
160526 03:16:27 mysqld_safe Logging to '/data/mysql/c88f6d20f621.err'.
160526 03:16:27 mysqld_safe Starting mysqld daemon with databases from /data/mysql

验证

服务器成功启动,恢复完成。

mysqladmin ping
mysqld is alive

小结

完成以上步骤后使用 mysqldump 导出需要的数据即可,mysqldump 参考这里

参考文档

回到页面顶部