为线上项目搭建测试平台,需要使用 RDS 中的部分真实数据,为了防止污染及损坏,因此将线上数据库恢复至自建数据库中供测试平台使用。
阿里云的备份策略分为两种。
- 物理备份
- 逻辑备份
不同之处在于,物理备份使用 Percona Xtrabackup 工具对物理层存储文件进行备份,是一种物理级的备份操作,因此备份速度较快,但是移植性(兼容性)较差;逻辑备份使用 MySQL 自带的 mysqldump 工具对数据库逻辑层语句进行备份,是一种对象级的备份操作。因此备份效率和恢复效率较低,但是兼容性高。
物理备份
使用阿里云内的自动物理备份文件进行恢复,现系统环境为 CentOS 7 和 MySQL 5.7 版本进行恢复操作。
下载备份
登陆 RDS管理控制台 ,选择正确的实例所在区域,例如:华北2(北京),点击想要恢复的实例,在左侧导航栏中选择备份恢复。在数据备份标签中可以看到本实例的全部备份文件信息。
找到想要恢复的时间点或者点击右上角的备份实例,选择备份方式为物理备份,然后耐心等待备份完成,待任务完成后点击下载按钮。
若恢复的机器为阿里云且在一个内网中,可以使用内网地址,否则请使用外网地址。
在 Linux 中执行命令下载备份文件
# wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar.gz
小贴士:命令中的-c
参数推荐不要省略,作用为启用断点续传模式。-O
表示将下载的文件输出至新的文件名。
目前阿里云的备份文件有 3 种格式:
- tar 压缩包(.tar.gz 后缀)
- xbstream 压缩包(.xb.gz 后缀)
- xbstream 文件包(_qp.xb 后缀)
小贴士:2019年2月20日后创建的 MySQL 5.6 实例,数据备份文件的格式为 xbstream 文件包(_qp.xb 后缀)。
解压备份
对于 tar 压缩包(.tar.gz 后缀)文件,使用命令:
# tar -izxvf <数据备份文件名>.tar.gz -C /home/mysql/data
对于 xbstream 压缩包(.xb.gz 后缀),使用命令:
# gzip -d -c <数据备份文件名>.xb.gz | xbstream -x -v -C /home/mysql/data
对于 xbstream 文件包(_qp.xb 后缀),使用命令:
# cat <数据备份文件名>_qp.xb | xbstream -x -v -C /home/mysql/data
# innobackupex --decompress --remove-original /home/mysql/data
检查解压的备份文件
[root@localhost ~]# ls -l /home/mysql/data
total 204842
-rw-r--r-- 1 root root 297 Dec 24 11:28 backup-my.cnf
-rw-r--r-- 1 root root 20444145145 Dec 24 22:34 ibdata1
drwxr-xr-x 1 root root 4096 Dec 24 18:20 mysql
drwxr-xr-x 1 root root 4096 Dec 24 18:20 performance_schema
drwxr-xr-x 1 root root 4096 Dec 24 18:20 test
drwxr-xr-x 1 root root 4096 Dec 24 18:20 beijinghx
恢复数据
# innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
若返回以下类似结果则为恢复成功,数值大小与备份数据量大小相关。
InnoDB: Shutdown completed; log sequence number 1953213
150428 22:08:00 innobackupex: completed OK!
配置更改
为了防止出现跨版本问题,需要修改配置文件参数。
# vi /home/mysql/data/backup-my.cnf
注释掉以下参数
名称 | 操作 |
---|---|
#innodb_fast_checksum | - |
#innodb_page_size | - |
#innodb_log_block_size | - |
若恢复库使用 MyISAM 引擎,请注释掉以下参数后并增加新参数。
名称 | 操作 |
---|---|
#innodb_log_checksum_algorithm=strict_crc32 | - |
#redo_log_version=1 | - |
skip-grant-tables | + |
修改文件属组
# chown -R mysql:mysql /home/mysql/data
启动数据库
# mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
登陆数据库
# mysql -uroot -p<数据库密码>
若登陆成功无报错提示即为成功。
逻辑备份
下载备份
登陆 RDS管理控制台 ,选择正确的实例所在区域,例如:华北2(北京),点击想要恢复的实例,在左侧导航栏中选择备份恢复。在数据备份标签中可以看到本实例的全部备份文件信息。
找到想要恢复的时间点或者点击右上角的备份实例,选择备份方式为逻辑备份,然后耐心等待备份完成,待任务完成后点击下载按钮。
若恢复的机器为阿里云且在一个内网中,可以使用内网地址,否则请使用外网地址。
在 Linux 中执行命令下载备份文件
# wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar
小贴士:命令中的-c
参数推荐不要省略,作用为启用断点续传模式。-O
表示将下载的文件输出至新的文件名。
解压备份
解包
# tar xf <数据备份文件名>.tar
解压
# gzip -d <数据库压缩文件名>.gz
恢复数据
登陆数据库创建对应的空数据库
# mysql -uroot -p
Enter password:
mysql> CREATE DATABASE <库名>;
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
导入数据
# mysql -uroot -p <创建的空数据库名> < ./<解压缩后数据库名>.sql
小贴士:请注意修改最后的文件路径为解压后的文件实际路径。
若无报错信息即为成功。
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2019-05-08 16:54 PM