zoukankan      html  css  js  c++  java
  • 如何将RDS的数据同步到本地自建数据库

    长期以来有很多的用户咨询如何将RDS的数据同步到本地的数据库环境中,本篇文章以在阿里云的ECS服务器为例来说明如何将RDS的数据同步到本地数据库中。RDS对外提供服务是一个DNS地址+端口3306,这样就屏蔽了RDS后端的主从节点,那么该如何将数据同步到本地?那么我们来看一下RDS的主从架构:

    应用连接RDS,流量通过SLB指向主从节点的master,所以如果我们连接RDS的账户具有REPLICATION SLAVE, REPLICATION CLIENT的权限,则就可以把主库master的产生的binlog同步到本地数据库中去,实现数据同步。

    但是这种根据binlog文件和位点来同步RDS的数据到本地的方式非常容易导致同步中断,因为当RDS发生了主备切换(主备切换,重启,跨机迁移),本地数据库所指向RDSbinlog
     
    位点则会发生变化(RDS主库与备库的binlog位点是不一致的),这样就会导致本地数据库与RDS的数据复制同步中断。
    RDS
    5.6
    的版本中主备同步使用新复制方式GTIDRDS的主备具有相同的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;
    设置本地MySQLRDS的复制关系,账户qianyi是在RDS控制系统中添加(注意:
    同步账户不要以repl开头);
    4
    .测试同步关系是否正常,可以在本地MySQL执行show slave statusG查看同步状态,同时可以在RDS中插入测试一些数据,或者重启实例,观察同步情况:
    mysql> show slave statusG;
    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的原生复制,所以可能会导致本地MySQLRDS的复制出现中断,可以定时去探测  Slave_IO_Running Slave_SQL_Running两个状态值是否为yes,同时也需要关注本地MySQLRDS的延迟: Seconds_Behind_Master

  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/lizhaojun-ops/p/6592022.html
Copyright © 2011-2022 走看看