如何在ECS实例上搭建RDS备库
更新时间:
概述
本文主要介绍如何使用RDS MySQL 5.6/5.7的物理备份文件,在ECS实例上搭建备库。
详细信息
阿里云提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
注意事项
- 本文使用CentOS 7的操作系统以及MySQL 5.6版本为例进行演示。
- 本地自建MySQL数据库的版本与RDS MySQL的版本需要一致。
- 需要保证ECS实例能够正常访问RDS实例,且建议使用RDS内网地址进行搭建。
- CentOS 6与CentOS 8操作系统版本结束了生命周期(EOL),按照社区规则,CentOS 6/8的源地址内容已移除。当您在CentOS 6/8系统内继续使用默认配置的源地址时会发生报错。建议您先切换CentOS 6/8的源地址,然后再进行操作。具体操作,请参见CentOS 6 EOL如何切换源?和CentOS 8 EOL如何切换源?。
安装MySQL数据库
- 登录ECS实例,执行以下命令,获取并安装MySQL源安装包。
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
yum localinstall mysql80-community-release-el7-1.noarch.rpm说明:CentOS 6的操作系统需要下载并安装mysql80-community-release-el7-1.noarch.rpm源安装包。
- 依次执行以下命令,配置安装是5.6版本MySQL的Yum源。
yum -y install yum-utils
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql56-community说明:
- 由于使用该Yum源默认安装的是8.0版本,因此需要执行以下命令,禁用默认安装8.0版本MySQL的Yum源。
yum-config-manager --disable mysql80-community
- 若您需要配置安装是5.7版本MySQL的Yum源,则执行以下命令。
yum-config-manager --enable mysql57-community
- 由于使用该Yum源默认安装的是8.0版本,因此需要执行以下命令,禁用默认安装8.0版本MySQL的Yum源。
- 执行以下命令,安装MySQL Server。
yum -y install mysql-community-server
- 编辑
/etc/my.cnf
文件,将文件内容替换成如下所示。说明:server-id不能与RDS实例相同。
[mysqld]
innodb_checksum_algorithm=crc32
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=524288000
innodb_undo_directory=/var/lib/mysql/
basedir=/usr datadir=/var/lib/mysql
innodb_undo_tablespaces=0
server-id=55555
log_bin=mysql-log
gtid_mode=on
enforce_gtid_consistency=on
log-slave-updates=1
relay_log=relay-log
sql_mode=''
binlog_format=row
skip-grant-tables=1 - 依次执行以下命令,配置Yum源。
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum update percona-release - 依次执行以下命令,查看并选择需要安装的软件。
yum list | grep percona
yum -y install percona-xtrabackup.x86_64
将RDS物理备份文件迁移到自建的MySQL数据库
注意:
- 建议使用最新的物理备份文件,因为使用之前的物理备份文件,可能导致二进制日志已经被清理导致无法获取二进制日志,进而导致搭建RDS备库失败。
- 2019年2月20日后创建的RDS MySQL 5.6实例,数据备份文件的格式为xbstream文件包,即以qp.xb为后缀文件。
- 更多过于迁移物理备份文件的信息及操作,请参考RDS MySQL物理备份文件恢复到自建数据库。
- 执行以下命令,下载RDS的备份文件并重命名为bak_qp.xb。
wget -c '[$RDS_Backup]' -O bak_qp.xb
说明:
- [$RDS_Backup]为物理备份文件的下载地址。
- 若下载不成功,需要确认当前ECS的内网IP是否加入到RDS的白名单中。
- 下载地址必须使用单引号引起来,否则会报403错误。
- 执行以下命令,进行解包。
cat bak_qp.xb | xbstream -x -v -C [$DIR]
说明:[$DIR]为自建数据库的数据目录绝对路径。
- 执行以下命令,进行解压。
innobackupex --decompress --remove-original [$DIR]
- 执行以下命令,恢复解压好的备份文件。
innobackupex --defaults-file=[$DIR]/backup-my.cnf --apply-log [$DIR]
- 执行以下命令,修改权限。
chown -R mysql:mysql /var/lib/mysql
- 执行以下命令,启动MySQL。
systemctl start mysql
- 执行
mysql
命令,进入MySQL命令行界面。 - 执行以下SQL语句,确认存在
user
为root
、host
为127.0.0.1
的用户。说明:而MySQL 5.7版本需要确认存在aliyun_root账号。
select user,host from mysql.user;
- 执行以下SQL语句,更新root账号的密码。
UPDATE user SET password=PASSWORD("[$Password]") WHERE user='root' and host = '127.0.0.1';
说明:[$Password]为您自定义的密码。
- 执行以下SQL语句,刷新权限。
flush privileges;
- 退出数据库命令行界面,删除
/etc/my.cnf
配置文件中的skip-grant-tables=1
参数。 - 执行以下命令,重启MySQL,然后确认可以使用RDS的账号登录。
systemctl restart mysql
搭建备库
- 执行以下命令,使用root账号进入MySQL命令行界面。
mysql -uroot -h127.0.0.1 -p[$Password]
- 依次执行以下SQL语句,删除5张表。
use mysql;
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats; - 执行以下SQL语句,生成表数据。
source /usr/share/mysql/mysql_system_tables.sql;
- 然后退出数据库命令行界面,重新启动MySQL。
- 查看并记录
/var/lib/mysql/xtrabackup_slave_info
中的set global gtid_purged
语句。 - 使用root账号进入MySQL命令行界面执行
reset master;
SQL语句,然后执行上一步记录的set global gtid_purged
SQL语句。 - 执行以下SQL语句,重置slave。
reset slave;
- 执行以下SQL语句,配置主从复制。
change master to master_host = '[$Host]', master_port = [$Port], master_user = '[$User]', master_password='[$Password]', master_auto_position = 1;
说明:
- [$Host]为RDS实例的地址。
- [$Port]为RDS实例的端口。
- [$User]为RDS实例的账号。
- [$Password]为RDS实例账号的密码。
- 依次执行以下SQL语句,确认Slave_IO_Running和Slave_SQL_Running值都为Yes。
start slave;
系统显示类似如下。
show slave status\G
适用于
- 云数据库RDS
- 云服务器ECS
文档内容是否对您有帮助?