如何將RDS的資料同步到本地自建資料庫

來源:互聯網
上載者:User

摘要: 長期以來有很多的用戶查閱如何將RDS的資料同步到本地的資料庫環境中,本篇本文以在阿裡雲的ECS伺服器為例來說明如何將RDS的資料同步到本機資料庫中。RDS對外提供服務是一個DNS位址+埠3306,這樣就遮罩了RDS後端的主從節點,那麼該如何將資料同步到本地?那麼我們來看一下RDS的主從架構:

長期以來有很多的用戶查閱如何將RDS的資料同步到本地的資料庫環境中,本篇本文以在阿裡雲的ECS伺服器為例來說明如何將RDS的資料同步到本機資料庫中。RDS對外提供服務是一個DNS位址+埠3306,這樣就遮罩了RDS後端的主從節點,那麼該如何將資料同步到本地?那麼我們來看一下RDS的主從架構:

套用串連RDS,流量通過SLB指向主從節點的master,所以如果我們串連RDS的帳戶具有REPLICATION SLAVE, REPLICATIONCLIENT的權限,則就可以把主庫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的物理備份中的backup-my.cnf參數

innodb_log_files_in_group=2###使用RDS的物理備份中的backup-my.cnf參數

innodb_log_file_size=524288000###使用RDS的物理備份中的backup-my.cnf參數

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 orfailed to initialize properly. You must at least set –server-id to enableeither a master or a slave. Additional error messages can be found in the MySQLerror log.

原因是由於RDS的備份檔案中包含了RDS的主從複製關聯,需要把這些主從複製關聯清理掉,清理方法:

truncate table slave_relay_log_info;

truncate table mysql.slave_master_info;

truncate tablemysql.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 statusG查看同步狀態,同時可以在RDS中插入測試一些資料,或者重啟實例,觀察同步情況:

mysql> show slave statusG;

Slave_IO_State: Queueing master event to the relaylog

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 therelay 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,同時也需要追隨本地MySQLRDS的延遲: Seconds_Behind_Master

相關產品:

  1. 雲資料庫RDS
  2. 雲資料庫 MongoDB 版
  3. 資料轉送
  4. 雲端服務器ECS
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.