如何将RDS的数据同步到本地自建数据库
长期以来有很多的用户咨询如何将RDS的数据同步到本地的数据库环境中,本篇文章以在阿里云的ECS服务器为例来说明如何将RDS的数据同步到本地数据库中。RDS对外提供服务是一个DNS地址+端口3306,这样就屏蔽了RDS后端的主从节点,那么该如何将数据同步到本地?那么我们来看一下RDS的主从架构:
应用连接RDS,流量通过SLB指向主从节点的master,所以如果我们连接RDS的账户具有REPLICATION SLAVE, REPLICATION CLIENT的权限,则就可以把主库master的产生的binlog同步到本地数据库中去,实现数据同步。
但是这种根据binlog文件和位点来同步RDS的数据到本地的方式非常容易导致同步中断,因为当RDS发生了主备切换(主备切换,重启,跨机迁移),本地数据库所指向RDS的binlog
位点则会发生变化(RDS主库与备库的binlog位点是不一致的),这样就会导致本地数据库与RDS的数据复制同步中断。
在RDS
5.6的版本中主备同步使用新复制方式GTID,RDS的主备具有相同的GTID,那么如果主备发生切换,重启或者迁移,主备的GTID是不会发生变化,那么ECSàRDS的同步链路则不会发生中断,所以如果要将RDS的数据同步到本地,则需要将RDS升级到5.6的版本。
下面我们将RDS数据同步到本地的一些关键步骤罗列出来:
1.在ECS服务器上安装MySQL,详细步骤可以参考如下:
http://www.centoscn.com/mysql/2014/0924/3833.html
一些关键注意点:
a.数据库的版本至少为5.6.16及以上
b.需要在my.cnf中配置的一些关键参数:
server-id ###Slave配置需要
master-info-repository=file### Slave配置需要
relay-log-info_repository=file### Slave配置需要
binlog-format=ROW### Slave配置需要
gtid-mode=on###开启GTID需要
enforce-gtid-consistency=true###开启GTID需要
innodb_data_file_path=ibdata1:200M:autoextend###使用RDS的物理备份文件恢复
innodb_log_files_in_group=2###使用RDS的物理备份文件恢复
innodb_log_file_size=524288000###使用RDS的物理备份文件恢复
2.MySQL安装好后,可以使用RDS提供的物理备份文件恢复到本地MySQL中,可以参考:
http://help.aliyun.com/knowledge_detail/5973700.html?spm=5176.7114037.1996646101.1.7qe3ot&pos=1
注意:
需要将备份解压后的文件backup-my.cnf中的三个参数加到启动文件中去
innodb_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
3.数据库启动后,开始设置本地数据库与RDS的同步关系
a.reset slave;####用于重置本地MySQL的复制关系,这一步操作有可能报错:
mysql> reset slave;
ERROR 1794 (HY000): Slave is not configured or failed to initialize
properly. You must at least set –server-id to enable either a master or a
slave. Additional error messages can be found in the MySQL error log.
原因是由于RDS的备份文件中包含了RDS的主从复制关系,需要把这些主从复制关系清理掉,清理方法:
truncate table slave_relay_log_info;
truncate table mysql.slave_master_info;
truncate table mysql.slave_worker_info;
然后重启MySQL;
b.SET @@GLOBAL.GTID_PURGED
='818795a2-8aa8-11e5-95b1:1-289,8da7b8ab-8aa8-11e5-95b1:1-75′;
打开备份解压文件可以看到文件xtrabackup_slave_info,其中第一行就是我们需要在本地MySQL执行的命令,他表示在备份结束时刻RDS当前GTID值'
c.change master to
master_host='gtid1.mysql.rds.aliyuncs.com',
master_user='qianyi',master_port=3306,master_password='qianyi',
master_auto_position=1;
设置本地MySQL与RDS的复制关系,账户qianyi是在RDS控制系统中添加(注意:
同步账户不要以repl开头);
4.测试同步关系是否正常,可以在本地MySQL执行show slave status\G查看同步状态,同时可以在RDS中插入测试一些数据,或者重启实例,观察同步情况:
mysql> show slave status\G;
Slave_IO_State: Queueing master event to the relay log
Master_Host: gtid1.mysql.rds.aliyuncs.com
Master_User: qianyi
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 625757
Relay_Log_File: slave-relay.000002
Relay_Log_Pos: 2793
Relay_Master_Log_File: mysql-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 612921
Relay_Log_Space: 15829
Seconds_Behind_Master: 57133
Master_SSL_Verify_Server_Cert: No
Master_Server_Id: 2319282016
Master_UUID: 818795a2-8aa8-11e5-95b1-6c92bf20cfcf
Master_Info_File: /data/work/mysql/data3001/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Reading event from the relay log
Master_Retry_Count: 86400
818795a2-8aa8-11e5-95b1-6c92bf20cfcf:17754-17811
Executed_Gtid_Set: 818795a2-8aa8-11e5-95b1-6c92bf20cfcf:1-17761
Auto_Position: 1
5.做好监控,由于采用MySQL的原生复制,所以可能会导致本地MySQL与RDS的复制出现中断,可以定时去探测
Slave_IO_Running和 Slave_SQL_Running两个状态值是否为yes,同时也需要关注本地MySQL与RDS的延迟: Seconds_Behind_Master。
如何将RDS的数据同步到本地自建数据库的更多相关文章
- phpwind将服务器数据同步到本地之后网站不显示或者排版错误
在将phpwind的数据同步到本地服务器之后 如果访问本地服务器的首页不能显示的话 首先要查看global.php文件中的D_P变量,官方默认 的此变量应该指向和R_P变量是同一个文件夹即网站的根目录 ...
- 阿里云RDS同步到本地自建mysql数据库从库
RDS mysql版本为5.6.29 x86_64 1.下载数据备份.binlog备份 内网中转?数据量不大,直接下载 下载数据备份(外网下载链接) wget -c "https://rds ...
- 阿里云RDS备份的tar格式包恢复到本地自建数据库
说明 阿里云RDS-mysql数据库是通过percona-Xtrabackup进行备份的,所以恢复时也需要安装该软件. 另外注意的是:你自己下载的MySQL版本要和阿里云上的MySQL版本一致,不然会 ...
- 将 云数据库MongoDB(阿里云)物理备份文件下载恢复至本地自建数据库 遇到的5个问题
有时候我们可能需要将云上数据库下载到本地,下面是我们在操作MongoDB数据库时遇到的五个小问题. 其实现在RDS的 帮助文档 写的都比较详细了,大家在第一次操作时,可以细读一下,避免一些不必要的问题 ...
- phpwind数据同步本地之后板块排版乱
排版紊乱的问题一般是css文件的问题 解决思路 1.打开chrome调用F12,查看是不是css文件没有获取. 2.如果没有获取到的话检查css文件的路径. 在本例中phpwind数据同步到本地之后, ...
- phpwind数据同步本地后登陆异常
在讲数据同步到本地之后,发现输入用户名和密码之后点击登陆,依然会返回到之前的页面,并且显示的还是未登录的状态. 解决办法:在后台中将:站点设置--cookie作用域留空即可.
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决
作为一个完整的整体信息化解决方案需要有足够强大的各种功能,这些功能相对独立,又互相依存.当有需要这样的功能时可以随时拿出来用,适当修改一下就可以满足要求.只有这样才能快速开发各种信息化系统,才能满足各 ...
- Oracle和Elasticsearch数据同步
Python编写Oracle和Elasticsearch数据同步脚本 标签: elasticsearchoraclecx_Oraclepython数据同步 Python知识库 一.版本 Pyth ...
- Kettle 实现mysql数据库不同表之间数据同步——实验过程
下面是试验的主要步骤: 在上一篇文章中LZ已经介绍了,实验的环境和实验目的. 在本篇文章中主要介绍侧重于对Kettle ETL的相应使用方法, 在这里LZ需要说明一下,LZ成为了避免涉及索引和表连接等 ...
随机推荐
- 简单探讨python中的语句和语法
python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句 ...
- JS正则密码复杂度校验之:至少有多种字符中的其中几种
概述 续接上文的密码校验要求: 这个需求有两个难点,一,是如何使用正则匹配所有半角英文标点符号,二,是如何验证密码段中在要求的四种(大写字母,小写字母,数字,标点符号)类型中至少存在三种. 第一个难点 ...
- OpenStack(企业私有云)万里长征第六步——OpenStack网络及虚拟机存储位置
一.前言 昨天又装了一遍OpenStack.码农这项工作就如同人生,永远有你想不到的意外在等着你,时而是惊喜时而是悲伤.在装的过程中倒是很顺利,只是在安装完成之后碰到了两个之前没有碰到的问题,这里记录 ...
- Win10下C:\Users\John以账户名称命名的系统文件夹用户名的修改
Win10下C:\Users\John以账户名称命名的系统文件夹用户名的修改.. 有时候我们由于各种原因想要更改DOS窗口下的账户名称,更改DOS窗口用户名C:\Users\XXX> 即更改为C ...
- 8.8.1 Super关键字
Super关键字 1.super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象. 2.super代表的是当前子类对象中的父类型特征. //通过子类的构造方法去调用父类的构造 ...
- PyQt4 初试牛刀一
建立了一个MainWindow,创建最基本的菜单栏.状态栏.工具栏,并重新定义了"X"关闭的默认行为. # -*- coding: utf-8 -*- import sys fro ...
- MySQL之数据的备份与还原
备份db_book:这里用到了cmd,以管理员方式运行,不然后面使用mysqldump会被拒绝访问!!! 1.启动cmd,输入命令,切换到MySQL的bin文件: 2.然后输入备份命令: 备份好的sq ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第3讲(逻辑方法的实现)
整体展示: 上一讲实现了诸多对象,这次我们就需要实现许多逻辑方法,如控制飞机移动,判断子弹击中敌机,敌机与英雄飞机相撞等等.并且我们在实现这些功能的时候需要计时器去调用这些方法.setInterval ...
- 一篇文章读懂Java类加载器
Java类加载器算是一个老生常谈的问题,大多Java工程师也都对其中的知识点倒背如流,最近在看源码的时候发现有一些细节的地方理解还是比较模糊,正好写一篇文章梳理一下. 关于Java类加载器的知识,网上 ...
- windows下命令行模式中cd命令无效的原因
当我们执行cmd 想切换当前工作目录时,会发现windows下命令行模式中cd命令没有生效,到底是什么原因呢? 例如: 当我们想切换到 D:\MySql\mysql-5.7.19-winx64\bin ...