MySQL主从

阿里云ECS搭建RDS从库

2019-06-20  本文已影响1人  飞翔的Tallgeese

架构

RDS版本:5.6.40

ECS自建库版本:5.7.26


前置工作

配置ECS防火墙

只开启ssh和80端口,此外再打开MySQL端口

配置ECS内网IP到RDS的白名单里

ECS搭建单机MySQL

脚本创建MySQL5.7

RDS物理备份还原到ECS

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.%,需要分开写出来

上一篇下一篇

猜你喜欢

热点阅读