阿里云代理商-阿里云服务器-阿里云数据库-重庆典名科技

如何在ECS实例上搭建RDS备库

发布时间: 2021-03-30 10:00:10文章作者: 网站编辑阅读量: 265
  概述
  本文主要介绍如何使用RDS MySQL 5.6/5.7的物理备份文件,在ECS实例上搭建备库。
  详细信息
  阿里云提醒您:
  如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
  注意事项
  本文使用CentOS 7的操作系统以及MySQL 5.6版本为例进行演示。
  本地自建MySQL数据库的版本与RDS MySQL的版本需要一致。
  需要保证ECS实例能够正常访问RDS实例,且建议使用RDS内网地址进行搭建。
  安装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
  执行以下命令,安装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_purgedSQL语句。
  执行以下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
联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠