共计 3620 个字符,预计需要花费 10 分钟才能阅读完成。
最近有个任务是需要把阿里云 rds 数据库备份再转移到 ecs 服务器中,本篇文章是通过官方网站上再结合自己的操作笔记备忘。
RDS 数据库的版本是 myql5.7,ECS 服务器上的版本是 mysql5.7
一、备份前的准备
1.ECS 安装 mysql5.7
如果安装了,请忽略。
Centos7 系统下编译安装 Mysql5.7
# wget https://gitee.com/funet8/MYSQL/raw/master/Mysql_Shell/CentOS7_Install_mysql5_7.sh
# sh CentOS7_Install_mysql5_7.sh
2.ECS 安装 Percona XtraBackup
对于 MySQL 5.7、5.6 或 5.5 实例:安装。
对于 MySQL 8.0 实例,安装 。
我这边安装 Percona XtraBackup 2.4 :https://docs.percona.com/percona-xtrabackup/2.4/installation/yum_repo.html
安装 percona-release 配置工具:
root 您可以通过以用户身份或使用 以下命令运行以下命令来安装 percona-release 的 yum 存储库
# yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
测试存储库:
# yum list | grep percona
启用存储库:
如果 Percona XtraBackup 打算与上游 MySQL 服务器结合使用,您只需要启用 tools 存储库:
# percona-release enable-only tools
通过运行安装 Percona XtraBackup
# yum install -y percona-xtrabackup-24
# xtrabackup -version
xtrabackup: recognized server arguments: --datadir=/var/lib/mysql
xtrabackup version 2.4.26 based on MySQL server 5.7.35 Linux (x86_64) (revision id: 19de43b)
Percona XtraBackup 安装成功。
3. 安装解压工具 qpress
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
二、下载备份
进入 RDS 数据库 —> 实例列表 —> 备份恢复
复制内网地址,公网是需要收费的。
在 Linux 服务器上,执行如下命令下载物理备份。
# wget -c'http://...' -O test1_qp.xb
命令:
# wget -c 'http://rdsbak-st-v2.oss-cn-shenzhen-internal.aliyuncs.com/custins34273877/hins19034500_data_20221129104523_qp.xb?Expires=******************************************************&Region=cn-shenzhen' -O test1_qp.xb
# ll -h test1_qp.xb
-rw-r--r-- 1 root root 8.7G Nov 29 10:48 test1_qp.xb
二、解压和恢复备份
1. 在 Linux 服务器上,创建一个目录(例如 /home/mysql/data)用于存放解压后的文件。
mkdir -p /home/mysql/data
2. 解压压缩包。根据压缩包的后缀选择解压命令。
## 先解包
cat test1_qp.xb | xbstream -x -v -C /home/mysql/data【已执行】
## 然后解压
### 对于 MySQL 5.6/5.7
innobackupex --decompress --remove-original /home/mysql/data【已执行】
说明 您可以把 test1 和 /home/mysql/data 替换为实际的文件名和路径。
3. 执行如下命令,查询解压后生成的文件。
ls -l /home/mysql/data
4. 执行如下命令,恢复解压好的备份文件。
## MySQL 5.6/5.7
innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data【已执行】
1. 恢复时请耐心等待,若系统返回如下类似结果,则说明备份文件已成功恢复到自建数据库。
2. 若系统返回xtrabackup: Unknown error 3613
,请将 Percona XtraBackup 更新到最新版本后再次尝试。
3. 若系统返回如下报错,可以用 rm -rf /var/lib/mysql
命令清空文件夹内文件,然后用 chown -R mysql:mysql /var/lib/mysql
修改权限。
4. 若系统返回如下报错,请参见 中的第 2 项说明。
三、启动 MySQL
1. 为避免版本问题,需修改 backup-my.cnf 文件,具体操作步骤如下。
执行如下命令,以文本方式编辑 backup-my.cnf 文件。
# vi /home/mysql/data/backup-my.cnf
添加如下参数:lower_case_table_names=1
port = 61922
datadir=/home/mysql/data
注释掉如下自建数据库不支持的参数:#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
说明 如果自建数据库使用的是 MyISAM 引擎,无法兼容阿里云的 InnoDB,则需要多注释掉如下参数并增加 skip-grant-tables 参数:
#innodb_log_checksum_algorithm=strict_crc32
#redo_log_version=1
skip-grant-tables
按 Esc 键,然后输入:wq 并回车进行保存。
2. 执行如下命令,修改文件属主,并确定文件所属为 MySQL 用户。
chown -R mysql:mysql /home/mysql/data
执行如下命令,启动 MySQL 进程。mysqld --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data &
关闭本地的 mysql 否则会报错
[ERROR] Another process with pid 27300 is using unix socket file.
# netstat -tunpl|grep mysql
tcp6 0 0 :::61922 :::* LISTEN 9366/mysqld
恢复成功。
root 密码问题:
-
如果您的实例版本为 MySQL 5.5 或 5.6,需要重置 root 密码方可正常使用。更多信息,请参见 。
-
如果您的实例版本为 MySQL 5.7 或 8.0,则 root 密码即自建库的 root 密码。
-
如果启动 MySQL 进程报错,可以尝试修改存储引擎。更多信息,请参见 。
登录 MySQL 数据库以验证进程启动成功
mysql -u< 源 RDS 实例账号 > -p< 对应密码 >
# mysql -u< 源 RDS 实例账号 > -h127.0.0.1 -P 61922 -p< 对应密码 >
mysql -uxshd_mysql -h127.0.0.1 -P 61922 -p
进入数据库:
通过 binlog 日志恢复数据
1. 下载 binlog 日志
wget -c'URL 路径 ' -O /data/tmp/binlog/mysql-bin1
2. 导入数据库
mysqlbinlog -d 指定数据库
mysql -f 忽略报错,强制导入
mysqlbinlog -d '指定数据库' /data/tmp/binlog/mysql-bin1 | mysql -u root -P61922 -f
参考文档
官方帮助文档: https://help.aliyun.com/knowledge_detail/41817.html