RDS MySQL物理备份文件恢复教程
背景:
在基础运维或必要取证时,我们需要对备份的数据库进行恢复,本文参考阿里云官方文档及实践整理教程。
基本环境:
1.系统要求: 建议CentOS 6.X/7.X, 本文使用的:7.8
2.Xtrabackup的版本
- MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见官方文档Percona XtraBackup 2.3。
- MySQL 5.7版本需要安装 Percona XtraBackup 2.4,安装指导请参见官方文档Percona XtraBackup 2.4。
- MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档Percona XtraBackup 8.0。
Tips: 在MySQL5.7阿里云官方文档推荐2.4,但是没有明确具体的版本,记得yum默认2.4.3, 在2.4.3版本存在若干BUG,建议直接根据链接下载RPM 本地yum安装。
如果为8.0,安装8.0.4存在BUG,例如:
Populating InnoDB table cache. Allocated tablespace ID 92 for dszgdb/dis_count, old maximum was 0 xtrabackup: Unknown error 3613 xtrabackup: Unknown error 3613 xtrabackup: Unknown error 3613 xtrabackup: Unknown error 3613
需要安装8.0.7版本问题解决
安装示例:
1.如果已经安装了,在恢复中,发现工具的版本不对,需要下载对应的Percona XtraBackup,首先需要卸载当前版本:
# yum移除xtrabackup yum remove percona-xtrabackup # 查询RPM包 rpm -qa|grep -i xtrabackup # 移除RPM rpm -e percona-xtrabackup-2.3.5-1.el7.x86_64
2.正式安装:
1.在官方文档找到RPM的安装方式
2.以2.4版本进行安装(以下命令为官网示例,注意此版本存在BUG,实际安装参考建议使用2.4最新版本)
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm yum localinstall percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
安装后结果:
3.安装qpress
XtraBackup的innobackupex命令依赖qpress命令,否则执行会提示: qpress command not found.
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar" tar xvf qpress-11-linux-x64.tar chmod 775 qpress cp qpress /usr/bin
安装成功:
数据恢复:
在获得数据备份文件的前提下,根据文件类型不同,解压方式也不一样,阿里云目前大概类型如下:
- tar 压缩包 (.tar.gz 后缀)
-
tar -izxvf <数据备份文件名> -C /home/mysql/data
-
- xbstream 压缩包 (.xb.gz 后缀)
-
gzip -d -c <数据备份文件名> | xbstream -x -v -C /home/mysql/data
-
- xbstream 文件包(_qp.xb 后缀)
-
2019年2月20日后创建的MySQL 5.6实例,数据备份文件的格式为xbstream文件包(_qp.xb后缀)
## 解包 cat <数据备份文件名> | xbstream -x -v -C /home/mysql/data ## MySQL 5.6/5.7解压 innobackupex --decompress --remove-original /home/mysql/data ## MySQL 8.0解压 xtrabackup --decompress --remove-original --target-dir=/home/mysql/data
-
- xbstream qpress压缩包(_xb.qp后缀)
-
qpress -do <数据备份文件名> | xbstream -x -v -C /home/mysql/data
-
解压后,进入该目录,目录结构如下:
这里有个小方法,mysql的数据目录可以看出,此目录结构为MySQL 8.0版本,使用对应8.0方式恢复即可。
## MySQL 5.6/5.7 innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data ## MySQL 8.0 xtrabackup --prepare --target-dir=/home/mysql/data xtrabackup --datadir=/var/lib/mysql --copy-back --target-dir=/home/mysql/data
恢复根据数据大小,进行恢复,数据量大可能比较慢,最终结果类似,如果过程报错,大部分可能是安装的XtraBackup和Mysql版本对应错误:
若系统返回如下报错,可以用rm -rf ,(提示,数据恢复最好用干净的环境进行恢复)
rm -rf /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
修改数据配置:
RDS的数据库阿里云进行了二次开发优化,原生mysql不支持部分参数,需要修改移除:
vim /home/mysql/data/backup-my.cnf
添加: lower_case_table_names=1 移除或注释 #innodb_log_checksum_algorithm #innodb_fast_checksum #innodb_log_block_size #innodb_doublewrite_file #innodb_encrypt_algorithm #rds_encrypt_data #redo_log_version #master_key_id #server_uuid
按Esc键,然后输入:wq并回车进行保存
赋予目录权限
chown -R mysql:mysql /home/mysql/data
启动MySQL,建议停止其他MySQL服务
mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data
mysqld根据情况进行指定,例如宝塔:/www/server/mysql/bin/mysqld,宝塔可以快速搭建使用MySQL各个版本。
如果不知道MySQL root的密码,可在配置文件中[mysqld]添加
[mysqld]
skip-grant-tables
最近使用mysql命令进入数据库:
数据导出:
如果希望对恢复的数据进行导出,可使用mysqldump进行导出,仍以宝塔路径示例:
/www/server/mysql/bin/mysqldump databases_name > databases.sql
参考:
https://help.aliyun.com/knowledge_detail/41817.html