阿里云ECS搭建RDS从库
架构
RDS版本:5.6.40
ECS自建库版本:5.7.26
前置工作
配置ECS防火墙
只开启ssh和80端口,此外再打开MySQL端口
配置ECS内网IP到RDS的白名单里
ECS搭建单机MySQL
RDS物理备份还原到ECS
主库配置工作
主库需要高权限账户,创建一个用于复制的账号
create user 'rpl'@'%' identified by 'password';
grant REPLICATION SLAVE,Replication client,reload on *.* to 'rpl'@'%' identified by 'password';
从库配置工作
修改从库的配置文件
在配置文件中加入#replication,该部分用来配置从库参数
#replication
read_only=1 #根据业务需求,此处设置从库为只读
replicate-wild-do-table=xxx1.% #需要传输的库
replicate-wild-ignore-table=mysql.% #需要过滤的库
replicate-wild-ignore-table=information_schema.% #需要过滤的库
replicate-wild-ignore-table=performance_schema.% #需要过滤的库
replicate-wild-ignore-table=xxx2.% #需要过滤的库
删除从库中被阿里修改过表结构的几张slave表,并重新创建
reset slave;
use mysql;
show tables like 'slave%';
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
根据没被修改的数据库中的这几个表的创建方式(show create table...),重新进行创建
从库创建复制账号,与主库的一致
create user 'rpl'@'%' identified by 'password';
grant REPLICATION SLAVE,Replication client,reload on *.* to 'rpl'@'%' identified by 'password';
从库创建没有super权限的账号
create user 'dasj'@'%' identified by 'password';
grant select,create,alter,drop,update,insert,delete on *.* to 'dasj'@'%' identified by 'password';
重启ECS端MySQL使设置生效
配置主从
change master to master_host='rm-xxxxxxxxxxx.mysql.rds.aliyuncs.com',master_user='rpl',master_password='password',master_port=3306,master_auto_position=1;
切换到主库
确认当前Executed_Gtid_Set
show master status
复制当前的Executed_Gtid_Set值
切换回从库
设置GTID_PURGED
reset master;
set global gtid_purged='14cd06a7-847a-11e8-bd61-506b4b2babde:1-4257177, 333cccc5-808b-11e8-a3bc-7cd30abeadba:1-6734';
配置完毕,启动主从
start slave;
检查状态
show slave status \G
出现双yes则表示配置成功
在线上RDS可以看到复制线程一直在工作
至此初步配置完成
关于过滤参数
replicate-wild-do-table和replicate-wild-ignore-table
replicate-do-db和replicate-ignore-db
根据网上的说法replicate-do-db和replicate-ignore-db这组参数有可能造成binlog过滤不完整的情况,因此普遍采用replicate-wild-do-table和replicate-wild-ignore-table这组参数进行数据过滤
比如不同步主库的mysql库,可以把参数写成replicate-wild-ignore-table=mysql.%
此外如果需要过滤多个库,不可以写成replicate-wild-ignore-table=mysql.%,xxx.%,yyy.%,需要分开写出来