准备工作:安装 XtraBackup
本文记录将百度云 RDS 的 MySQL 备份文件(backup.gz)还原到本地 CentOS 6.5 64 位系统 MySQL 服务器的完整流程。首先需要安装 Percona XtraBackup 工具。
前往 Percona 官网,根据你的系统版本下载对应的 RPM 包。本文以经典的 2.1.5 版本为例:
wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.5/RPM/rhel6/x86_64/percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm
安装必要的依赖包:
yum install -y perl-DBD-MySQL perl-DBI perl-Time-HiRes libaio*
安装 XtraBackup RPM 包:
rpm -ivh percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm
验证安装是否成功:
rpm -qa | grep xtrabackup
预期输出:
percona-xtrabackup-2.1.5-680.rhel6.x86_64
查看安装的文件:
rpm -ql percona-xtrabackup-2.1.5-680.rhel6.x86_64
输出应包含关键工具路径,如 /usr/bin/innobackupex、/usr/bin/xtrabackup 等。
步骤一:下载并解压备份文件
使用 wget 从 RDS 控制台下载备份文件(例如 backup.gz)。下载后,执行以下命令进行解压和解包:
mkdir -p /home/mysql/data_dir && gzip -d -c backup.gz | xbstream -x -C /home/mysql/data_dir
此命令会:
- 创建数据目录
/home/mysql/data_dir。 - 使用
gzip -d -c解压备份流。 - 通过
xbstream -x将解压后的流提取到指定目录。
步骤二:应用事务日志(Prepare)
解包完成后,需要应用 InnoDB 的重做日志(redo log)以使数据文件达到一致状态。这是恢复的关键步骤。
注意: 一些旧的教程或文档可能会使用错误的命令(如 innobackupex_55),导致“command not found”错误。正确的命令是 innobackupex。
执行以下命令:
innobackupex --defaults-file=/home/mysql/data_dir/backup-my.cnf --apply-log /home/mysql/data_dir
命令成功执行后,终端会输出一系列日志,最终显示类似“completed OK!”的信息。
步骤三:配置 MySQL 并启动服务
准备完成后,需要根据备份的配置文件调整本地 MySQL 的配置。
- 编辑 MySQL 配置文件:
vi /etc/my.cnf
- 在
[mysqld]部分,注释掉或修改原有的datadir指向,并添加以下关键参数。这些参数值应参考/home/mysql/data_dir/backup-my.cnf文件,特别是innodb_log_file_size。
[mysqld]
# 将 datadir 指向解压后的数据目录
datadir=/home/mysql/data_dir
# 以下参数需与备份的 InnoDB 系统表空间配置匹配
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:32M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=268435456
innodb_fast_checksum=0
innodb_page_size=16384
innodb_log_block_size=512
innodb_undo_tablespaces=0
说明: innodb_log_file_size 的值(本例为 256MB)必须与备份产生时的设置一致,否则 MySQL 无法启动。
- 重启 MySQL 服务以使新配置生效:
/etc/init.d/mysql restart
重启后,使用 MySQL 客户端连接,检查数据库是否已成功恢复。
总结与注意事项
- 命令差异: 不同版本的 XtraBackup 命令可能略有不同。本文基于 2.1.x 版本,更高版本(如 8.0)的命令和选项可能已更新,请以官方文档为准。
- 配置文件: 务必确保
my.cnf中的 InnoDB 参数,尤其是innodb_log_file_size,与备份源环境匹配。 - 权限问题: 确保 MySQL 运行用户(通常是
mysql)对数据目录/home/mysql/data_dir拥有完整的读写权限。 - 版本兼容性: XtraBackup 的版本最好与备份文件的 MySQL 主版本兼容。还原前请确认版本支持矩阵。