下面文档讲述RDS FOR MYSQL 各版本利用物理备份搭建从库方法:
说明:暂时包含RDS for mysql5.6和5.7版本的复制搭建过程:
1. 本地自建Mysql数据必须和云mysql版本大版本保持一致
2. 64位的Linux系统
3. MySQL 5.6及之前(含5.5)的版本需要安装 Percona XtraBackup 2.3 ; MySQL 5.7版本需要安装 Percona XtraBackup2.4 4. 为了快速恢复,本地mysql安装都采用centos的yum安装方式
5.注意下面没有说明哪个版本执行的就是都需要执行的
6.搭建复制环境前需要保证ECS能够访问的通RDS,建议用RDS内网地址进行复制搭建
5.6恢复示例:
安装mysql:
下面演示的是基于centos6系统的,centos7的见后面相关部分
1.下载yum源
centos6下安装:
wget https://repo.mysql.com//mysql80-community-release-el6-1.noarch.rpm
yum localinstall mysql80-community-release-el6-1.noarch.rpm -y
centos7下安装: wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm yum localinstall mysql80-community-release-el7-1.noarch.rpm
2.配置yum源
yum -y install yum-utils
#根据选择安装需要的版本
yum-config-manager --disable mysql80-community 默认是安装8.0版本的mysql需要关闭这个yum源
yum-config-manager --enable mysql57-community 恢复5.7版本就执行这条 5.7执行
yum-config-manager --enable mysql56-community 如果是恢复5.6版本执行这条 5.6执行
3.安装mysql server (yum安装完成后不慌启动mysql) yum -y install mysql-community-server
4.替换/etc/my.cnf文件内容为以下内容,其中跳过权限表启动:
[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
注意: server_id可以自己改,务必不要和RDS的一样了。
1).配置yum源
yum -y install 2). 查看yum源,选择要安装的软件
yum list | grep percona
yum -y install percona-xtrabackup-24.x86_64 5.7版本需要安装这个
yum -y install percona-xtrabackup.x86_64 5.6版本需要安装这个
6.下载备份文件并恢复:
注意: 1.要做物理备份的恢复最好临时RDS控制台做个物理备份,备份做好后下载备份文件并恢复(如果用以前的备份可能导致二进制日志已经被清理了无法获取二进制日志进而复制环境搭建失败) 2. 要下载备份和配置主从关系,需要把当前ECS的内网IP加入到RDS的白名单里面
wget -c 'rds备份文件下载地址' -O bak.tar.gz 这个到RDS控制台备份恢复里面去获取备份集下载地址,注意下载地址这里用wget下载需要用单引号引起来,否则会报403错误
tar -izxvf bak.tar.gz -C /var/lib/mysql 在下载的备份文件目录执行解压,-C指定解压到/var/lib/mysql目录,因为yum安装的datadir是这个
cd /var/lib/mysql
innobackupex --defaults-file=backup-my.cnf --apply-log /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
/etc/init.d/mysqld start
更新aliyun_root@127.0.0.1密码:
mysql #shell里面执行mysql连接mysql并修改密码
mysql>select user,host from mysql.user; 查看是否有aliyun_root@127.0.0.1这个用户,可根据需要来设置根据这个sql查看到有的账号密码
mysql>flush privileges; mysql>SET PASSWORD FOR 'aliyun_root'@'127.0.0.1' = PASSWORD('MyNewPass'); 5.7版本是aliyun_root@127.0.0.1 mysql>SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('MyNewPass'); 5.6版本是'root'@'127.0.0.1' mysql>exit
删除/etc/my.cnf里面的skip-grant-tables=1 /etc/init.d/mysqld restart
账号也迁移过来了的,可以用账号云mysql的账号登陆了:
登陆:
mysql -ualiyun_root -h127.0.0.1 -pMyNewPass 5.7执行
mysql -uroot -h127.0.0.1 -pMyNewPass 5.6执行
mysql>use mysql; 5.6执行
mysql>drop table slave_master_info; 5.6执行
mysql>drop table slave_relay_log_info; 5.6执行
mysql>drop table slave_worker_info; 5.6执行
mysql>drop table innodb_index_stats; 5.6执行
mysql>drop table innodb_table_stats; 5.6执行
mysql>source /usr/share/mysql/mysql_system_tables.sql; 5.6执行 mysql>exit /etc/init.d/mysqld restart 5.6版本必须重启,切记执行 查看/var/lib/mysql/xtrabackup_slave_info 里面的set global gtid_purged语句,把这个copy到后面复制用 mysql -uroot -h127.0.0.1 -pMyNewPass 5.6执行 mysql>reset master; 5.6执行 mysql>set global gtid_purged=xxx 上面截图的复制过来执行一次 5.6执行
mysql>reset slave;
mysql>change master to master_host = 'rm-xxxxx.mysql.rds.aliyuncs.com', master_port = 3306, master_user = 'sadmin', master_password='Mypassword', master_auto_position = 1;
mysql>start slave;
mysql>show slave status\G 注意:上面的master_host master_port
master_user master_password 根据RDS主库的信息各自填写自己的信息,不要照着上面执行; 搭建完成show slave status\G看到的结果应该如下,slave io/sql线程都是YES状态: mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: rm-xxxxx.mysql.rds.aliyuncs.com
Master_User: hkadmin
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000245
Read_Master_Log_Pos: 391176
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 1588
Relay_Master_Log_File: mysql-bin.000245
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 391176
Relay_Log_Space: 1789
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 999098802
Master_UUID: a23bf85f-f20b-11e8-8268-7cd30abda240
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: a23bf85f-f20b-11e8-8268-7cd30abda240:493276-493279
Executed_Gtid_Set: 937ca3af-f20b-11e8-9447-7cd30ab8a5d8:1-178841,
a23bf85f-f20b-11e8-8268-7cd30abda240:1-493279
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)