场景
因为一些特殊的缘由,某燃气公司线下ECS上须要在ECS上搭建一套从库,须要同步RDS数据库的数据(mysql5.7版本)。mysql
实现RDS for mysql与线下ECS上自建数据库数据实时同步,阿里云官方推荐使用DTS方式进行。缘由有两个:sql
一、mysql-bin正常状况下,RDS在本地只保存18个小时数据库
二、当RDS实例切换时,会影响自建ECS数据同步(这个通过测试能够排除)vim
一方面考虑到使用DTS工具会产生很多的费用(长期使用),另外一方面,在数据库中一个地区对应一个库,后续业务没法事先规划好库名,此时若是使用dts可能须要购买多个通道,进行配置,比较费时费力且费钱。基于这两个缘由的考虑,某燃气公司决定使用搭建主从复制方式来实现数据同步。如下是搭建RDS与ECS主从复制过程工具
操做步骤
配置RDS主实例
-
登陆 RDS 控制台,选择目标实例。测试
. 配置从实例读取数据使用的只读帐号和受权数据库。 . 将ECS的从实例的 IP 地址加入主实例的 IP 白名单中 . 登陆主实例 . 查询主实例的 server-id。
# show variables like 'server_id'; 系统返回以下信息: +-------------------------+-----------------+ | Variable_name | Value | +-------------------------+-----------------+ | server_id |678888899909 | | server_id_bits | 32 | +-------------------------+-----------------+
配置ECS上从实例
- 安装 MySQL 从实例。
MySQL 安装包和安装方法,这里略,这里建议安装percona版本的mysql。
中止从实例 mysql 服务。阿里云
. 修改从实例 mysql 配置文件。
1)打开从实例 MySQL 配置文件。
vim /etc/my.cnfspa
. 配置从实例的 server-id 和要同步的数据库。
server-id = 123456789 log_bin=/data/dbdata/mysql-bin expire_logs_days = 7 max_binlog_size = 100M replicate-ignore-db = mysql #不须要同步的数据库 replicate-ignore-db = information_schema #不须要同步的数据库 replicate-ignore-db = performance_schema #不须要同步的数据库 replicate-ignore-db = sys #不须要同步的数据库
- 配置 GTID 同步模式,binlog 格式为 row,以兼容主实例。
#GTID gtid_mode=on enforce_gtid_consistency=on binlog_format=row #设置 binlog 为 row log-slave-updates=1
- 执行以下命令,查看 binlog 配置结果。
# show variables like '%binlog_format%'; 系统返回以下信息: +-------------------------+-----------------+ | Variable_name | Value | +-------------------------+-----------------+ | binlog_format | ROW | +-------------------------+-----------------+
- 将主实例数据全量同步到从实例。
方式一:经过dts进行数据实时同步
方式二:经过mysqldump进行导出数据库及导入数据
注:这里你们应该比较熟悉,就不详细介绍日志
. 登陆数据库,设置同步选项。
mysql>change master to master_host = 'rds服务地扯', master_port = 3306, master_user = 'root', master_password='masterpassword', master_auto_position = 1;
- 启动从实例。
mysql>slave start;
- 检查同步结果。
mysql>show slave status\G 查看系统返回信息中 Slave_IO_Running 和 Slave_SQL_Running 的状态是否为 Yes,以下所示。 Slave_IO_Running: Yes Slave_SQL_Running: Yes
注: Slave_IO_Running、Slave_SQL_Running两个参数均为yes,表示IO进程及SQL进程都正常,表示配置RDS主从实例成功。code
邮件告警功能
因为mysql-binlog在RDS上正常状况下只保存18个小时,此时必需要对从库及主库状态进行控制,防止从库没有应用日志,RDS主库上的日志就已经删除,这节内容会在下一篇文章中描述。下面会配合lepus监控软件实现邮件告警的功能。
via 卓见云技术服务团队