(文字参见 https://help.aliyun.com/knowledge_detail/41817.html)
前提概要
环境
-
服务器环境:Ubuntu16.04
-
终端工具:iTerm (Mac)
-
数据压缩解压工具:rds_backup_extract (仅仅适用RDS)
-
数据库恢复工具:Percona XtraBackup 2.2 Release 2.2.12
-
本地数据库环境:mysql 5.7.22
-
RDS:MySQL5.6.16
目标:将RDS上的数据库备份到本地服务器中
步骤说明:
1.本地服务器安装 Percona XtraBackup
安装说明: 1.从Percona XtraBackup官网下载对于mysql版本的官方包(本人安装的2.4.8版本对于MySQL5.7);
2.为了防止出现安装时出现依赖问题 ,本地安装gdebi; sudo apt-get install gdebi 再安装你要安装的包:*.deb
sudo gdebi *.deb(注意此安装方式为 Ubuntu系统安装方式)
3.查看 percona-xtrabackup 版本 innobackupex -v
2.下载数据备份文件解压工具rds_backup_extract.sh
3. 下载数据备份文件到本地服务器(此步骤如下)
获取数据备份文件下载地址,具体操作步骤如下。
-
登录RDS管理控制台。
-
选择目标实例所在地域。
-
单击目标实例的ID,进入基本信息页面。
-
在左侧导航栏中,选择备份恢复,进入备份恢复页面。
-
选择数据备份标签页。
-
选择查询的时间范围,然后单击查询。
-
在数据备份列表中,找到要下载的数据备份,并单击其对应的下载,如下图所示。
在实例备份文件下载窗口,单击复制外网地址,获取数据备份文件外网下载地址,如下图所示。
下载数据备份文件,具体操作步骤如下。
-
登录云服务器ECS。
-
执行如下命令,下载数据备份文件。
wget -c '<数据备份文件外网下载地址>' -O <自定义文件名>.tar.gz
参数说明:
-
-c:启用断点续传模式。
-
-O:将下载的结果保存为指定的文件(建议使用URL中包含的文件名)。
说明:若提示显示100%进度,则表示文件下载完成。
4.将下载的数据备份恢复到本地MySQL数据库中,具体操作步骤如下。
-
执行如下命令,解压已下载的数据备份文件。
说明:本文以自定义路径
/home/mysql/data
为例,您可以根据实际情况将其替换成实际路径。bash rds_backup_extract.sh -f <数据备份文件名>.tar.gz -C /home/mysql/data
参数说明:
-
-f:指定要解压的备份集文件。
-
-C:指定文件要解压到的目录。可选参数,若不指定就解压到当前目录。
-
执行如下命令,查询解压后生成的文件。
ls -l /home/mysql/data
命令执行成功后,系统会返回如下结果,其中蓝色字体为生成备份文件时RDS实例所包含的数据库。
-
执行如下命令,恢复解压好的备份文件。
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data
若系统返回如下类似结果,则说明备份文件已成功恢复到本地数据库。
5.为避免版本问题,需修改backup-my.cnf参数,具体操作步骤如下。
-
执行如下命令,以文本方式编辑backup-my.cnf文件。
vi /home/mysql/data/backup-my.cnf
-
执行如下命令,注释掉如下参数。
#innodb_fast_checksum
#innodb_page_size
#innodb_log_block_size
(第五个步骤我是落在第四步之前提前执行的)
执行如下命令,修改文件属主,并确定文件所属为MySQL用户。
chown -R mysql:mysql /home/mysql/data
执行如下命令,启动MySQL进程。
mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
(本人就卡在这里欲仙欲死,服务器一直会停住执行不了)
这一步实际上就是要把本地mysql存储数据路径改成 home/mysql/data 这个路径
i.停服务
ii.更改 mysql 配置文件 datadir 改成 /home/mysql/data
iii.跳过密码验证 mysqld_safe --skip-grant-tables
vi.无密码登录 mysql -u root
(如果RDS 版本低于 本地数据库 ,则执行 mysql_upgrade -u root ,本地数据库版本不能低于RDS 的版本)
v.恢复完成后,表mysql.user中不包含在RDS实例中创建的用户,需要新建。在新建用户前,执行如下命令。
delete from mysql.db where user<>’root’ and char_length(user)>0;delete from mysql.tables_priv where user<>’root’ and char_length(user)>0;flush privileges;
授权
grant all privileges on *.* to 'root'@'localhost' identified by 'root' with grant option;