各種場景下從MySQL數據庫遷移到Amazon Aurora

作者介紹

韓思捷,亞馬遜AWS解決方案架構師,曾負責大企業客戶在AWS上的售後技術支持工作,目前負責基於AWS的雲計算方案架構諮詢和設計。在加入AWS之前,在中國醫藥集團,Oracle以及EMC研發中心工作,有多年開發和運維經驗,並對各種數據庫以及存儲應用的高可用架構,方案及性能調優有深入研究。

隨著Amazon Aurora數據庫被客戶從認識到認可,越來越多的企業客戶在完成功能和性能的驗證以後,會考慮把他們在生產環境中運行的MySQL數據庫遷移到Amazon Aurora數據庫上。

本文描述了在各種不同的場景下,如何把MySQL數據庫的數據遷移到Amazon Aurora裡。

以下內容的描述,如果沒有特別說明,都是基於AWS的us-west-2區進行介紹,並且按照從簡單到複雜的順序對各種場景進行描述。

場景一:Amazon MySQL RDS遷移到Amazon Aurora並有停機時間

如果客戶正在使用Amazon MySQL RDS,並且有足夠的停機遷移的時間窗口的話,那麼可以通過RDS快照的方式進行遷移。具體操作過程如下:

1)停止應用程序對源數據庫的寫入操作。

2)對源數據庫創建快照,可以使用圖形界面進行操作,選中要遷移的數據庫實例,Actions下來菜單中選擇Take snapshot,如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora各種場景下從MySQL數據庫遷移到Amazon Aurora

3)根據快照恢復出一個Aurora數據庫。可以使用圖形界面操作,在數據庫列表中,選中之前創建快照的數據庫實例,Actions下來列表中選擇Migrate snapshot,如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

在隨後顯示的頁面中,輸入Aurora數據庫的相關信息即可,包括指定一個新的Aurora數據庫實例名稱,網絡配置等,這部分內容與直接創建一個新的Aurora數據庫是完全一致的。

各種場景下從MySQL數據庫遷移到Amazon Aurora

4)等到Aurora數據庫創建好以後,就可以修改應用程序的連接字符串,指向Aurora,從而投入使用了。

場景二:Amazon MySQL RDS遷移到Amazon Aurora並要求最小停機時間

如果客戶正在使用Amazon MySQL RDS,並且沒有足夠的停機時間來通過snapshot的方式進行遷移的話,那麼可以通過為MySQL RDS創建Aurora讀副本的方式進行遷移。具體操作過程如下:

1)在控制檯界面上選中要遷移的MySQL RDS數據庫,在Actions下拉菜單中選擇Create Aurora read replica,如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

2)在創建Aurora副本的界面上輸入相關的信息,其過程與創建一個新的Aurora數據庫類似。

在創建Aurora讀副本的過程中,源MySQL RDS數據庫可以仍然被業務系統訪問並使用。在讀副本創建完畢以後,該副本的內容會自動與MySQL RDS主庫保持數據同步。

在確定要進行切換之前(通常都是在業務低谷的時間段),關閉應用程序,從而停止應用程序對主庫的寫入操作,並登陸到Aurora裡執行下面的命令來判斷Aurora讀副本是否與主庫保持同步了:

show slave status \G

檢查輸出裡的Seconds_Behind_Master字段的值,如果為0則表示Aurora讀副本已經與MySQL RDS主庫保持同步了。否則繼續等待,直到該字段為0為止。然後選擇Aurora只讀副本,在Actions下拉菜單中選擇Promote選項:

各種場景下從MySQL數據庫遷移到Amazon Aurora

在彈出的界面中,選擇Promote Read Replica按鈕,從而把Aurora只讀副本提升為主庫:

各種場景下從MySQL數據庫遷移到Amazon Aurora

一旦完成主從切換,再次登陸到Aurora數據庫,執行show slave status的時候,會發現已經沒有輸出信息了。這也就說明Aurora數據庫已經不再是一個只讀副本,而變成了一個完全獨立的數據庫。

修改應用程序的數據庫連接字符串,使其指向Aurora數據庫,並啟動應用程序,從而開始在生產環境中使用Aurora數據庫。

場景三:自建MySQL數據庫遷移到Amazon Aurora並有足夠的停機時間

如果客戶沒有使用Amazon MySQL RDS,而是在EC2虛擬機裡,或者本地數據中心的服務器上,由客戶自己部署安裝的MySQL數據庫,需要遷移到Aurora數據庫,同時也有足夠的停機遷移時間窗口,那麼可以使用備份恢復的方式,進行遷移。其操作過程如下:

1)到Percona官方網站上下載XtraBackup工具,這裡下載4.1版本。

下載鏈接:

https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

如下所示:

wget

https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.1/binary/tarball/percona-xtrabackup-2.4.1-Linux-x86_64.tar.gz

tar -xzvf percona-xtrabackup-2.4.1-Linux-x86_64.tar.gz

2)執行Percona XtraBackup命令,創建備份。比如下面的例子:

innobackupex –user=root –password=<your password> –database=myaurora –stream=tar ~/s3-restore/backup2 | split -d –bytes=51200000 – ~/s3-restore/backup.tar

3)把數據庫備份(本例中是tar開頭的文件,比如backup.tar00,其中包含了xtrabackup生成的數據庫備份文件)上傳到S3,如果是在本地數據中心生成的備份,並且尺寸特別大的話,可以使用AWS Snowball服務進行上傳。

具體參考:

https://aws.amazon.com/cn/snowball/

4)把備份從S3恢復到Amazon Aurora數據庫裡。如下圖所示:

a.在RDS控制檯上選擇Restore from S3按鈕

各種場景下從MySQL數據庫遷移到Amazon Aurora

b.選擇Aurora引擎

c.指定備份的相關信息,如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

d.在數據庫的配置的相關頁面上,輸入Aurora數據庫的信息,比如數據庫的名稱,管理員名稱與密碼等,這一步與正常創建Aurora數據庫的過程是一樣的。

5)當Aurora數據庫恢復完成以後,就可以投入生產使用了。

場景四:自建MySQL數據庫遷移到Amazon Aurora並要求最小停機時間

如果客戶是在EC2或者本地數據中心自己部署的MySQL數據庫,希望遷移到Amazon Aurora數據庫,同時沒有足夠的停機時間來通過備份恢復的方式完成整個遷移。

這種場景相對比較複雜,通常可以使用兩種方式來進行最小時間停機的遷移。

方式1:通過構建MySQL主從副本的方式完成遷移,整個流程如下所示:

1)創建Aurora從庫(即讀副本),通過binlog與MySQL主庫保持同步,如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

2)MySQL主,Aurora從的關係建立起來以後,持續進行數據同步,如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

在這個階段,Aurora數據庫只能進行讀操作,不能進行寫操作,可以把Aurora的read_only參數設置為1強制只讀,或者也可以保持0,而是從應用程序端進行控制,禁止其在Aurora數據庫裡進行寫操作。

3)當需要進行切換的時候,也就是業務低谷的時候,停止應用程序在源MySQL數據庫裡的寫入操作,然後等到Aurora從庫的數據與MySQL主庫的數據完全一致以後,修改應用程序的連接字符串,使其指向Aurora從庫,使得Aurora數據庫變為主要的寫入數據庫。如果你之前把Aurora數據庫的read_only設置為了1,則需要把其改回到0,從而允許寫入Aurora數據庫。

而原來的MySQL數據庫則可以被銷燬。該階段如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

具體操作過程如下:

1)使用xtrabackup對主庫進行備份,並指定–slave-info,從而生成日誌點的位置信息,如下例所示:

innobackupex –user=root –password=<your password> –database=myaurora –slave-info –stream=tar ~/s3-restore/backup2 | split -d –bytes=51200000 – ~/backup.tar

2)提取tar開頭的文件(比如backup.tar00)裡的xtrabackup_binlog_info文件,其中存放了日誌點的信息。

3)把備份(這裡是tar開頭的文件,比如backup.tar00)上傳到S3,並按照場景三所示的方式恢復出一個Aurora數據庫。

4)進入Aurora數據庫,並執行下面的存儲過程,從而把Aurora數據庫配置為MySQL的副本:

CALL mysql.rds_stop_replication;

CALL mysql.rds_set_external_master (

'172.31.20.125'

,'3306'

, 'repadmin'

, '<password>'

, 'mysql-bin.000001'

, '1024'

, 0

);

CALL mysql.rds_start_replication;

注意這裡的mysql-bin.000001和1024就是從xtrabackup_binlog_info文件中找出來的、備份的時候的日誌點的信息。

5)一旦Aurora數據庫與主庫建立起了主從複製的關係以後,等到業務低谷的時候,停止應用程序對MySQL數據庫的寫入操作,並等到Aurora與MySQL完全一致以後,把應用程序的數據庫連接字符串改為Aurora數據庫即可。

方式2:通過使用AWS DMS服務完成遷移,整個流程如下所示:

AWS Database Migration Service(DMS)服務可以幫助客戶在最小停機時間的情況下, 採用在源庫上捕獲變化數據,並在目標庫上應用變化數據的形式,進行數據庫的整體遷移。

DMS不僅可以進行相同數據庫引擎的遷移,同時還支持不同數據庫引擎之間的遷移。

不過DMS只能遷移數據本身,其他數據庫對象,比如存儲過程等,是不能遷移的。需要手工在目標數據庫裡創建。

有關DMS的詳細信息可以參考:

https://aws.amazon.com/dms/

具體操作過程如下所示:

1)創建複製實例。複製實例的目的在於管理DMS在運行復制過程中的一些元數據。創建過程如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

在DMS的主頁上,選擇Replication instances,然後在右邊點擊Create replication instance按鈕。

在顯示的界面上輸入DMS實例相關的一些信息,比如實例名稱,實例大小等。

需要注意的是,如果需要傳輸的數據量比較大,同時源數據庫上有較大的工作壓力的話,應該選擇較大的機型。

具體細節可以參考:

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html#CHAP_ReplicationInstance.Creating

2)創建source endpoint,指向源數據庫。

在右邊選擇Endpoints,點擊Create endpoint按鈕:

各種場景下從MySQL數據庫遷移到Amazon Aurora

選擇endpoint type為Source endpoint,並指定源數據庫的信息,如下所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

點擊創建endpoint按鈕從而創建source endpoint:

各種場景下從MySQL數據庫遷移到Amazon Aurora

創建了source endpoint以後,我們可以進行連接測試:

各種場景下從MySQL數據庫遷移到Amazon Aurora

3)創建target endpoint,指向目標數據庫。

先創建一個空的、不包含業務數據的Aurora數據庫作為目標庫,然後創建一個類型為target endpoint、並指向該Aurora數據庫的endpoint:

各種場景下從MySQL數據庫遷移到Amazon Aurora

當target endpoint創建完畢以後,我們可以進行連接測試:

各種場景下從MySQL數據庫遷移到Amazon Aurora

4)創建task,啟動複製任務。

創建了源和目標endpoint以後,可以開始創建複製任務。選擇Database migration tasks鏈接,然後選擇Create task按鈕:

各種場景下從MySQL數據庫遷移到Amazon Aurora

在創建任務的界面上,選擇之前創建的source endpoint和target endpoint,migration type選擇Migrating existing data and replicate ongoing changes,同時選擇Enable CloudWatch logs複選框。

在Selection rules部分,我們指定把MySQL裡的myaurora數據庫的數據複製到Aurora裡,如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

參考以下文檔瞭解其他選項的含義:

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html

在設置好參數以後,點擊Create task按鈕。

等到任務正常運行以後,則源MySQL數據庫和目標Aurora數據庫之間就通過DMS服務進行數據同步,並且該同步過程是同步增量數據。如下圖所示:

各種場景下從MySQL數據庫遷移到Amazon Aurora

當需要進行數據庫切換的時候,通常都是業務低谷的時間段:

  • 停止應用程序向MySQL數據庫寫入數據。

  • 等到所有數據都同步到Aurora以後,停止DMS任務。

  • 修改應用程序的連接字符串,使其指向Aurora數據庫,則可以完成整個遷移過程。

使用AWS DMS把自建的MySQL數據庫遷移到Aurora數據庫的最大好處,在於整個操作過程非常簡單,沒有太多的步驟,也就不容易出錯。在進行DMS遷移的過程中,參考如下的建議:

  • 如果要遷移的數據庫很大,則建議使用較大的機型作為複製實例

  • 把小的表集中作為一個任務進行復制。而把每個較大的表作為一個單獨的任務進行復制。

總的來說,本文按照從簡單到複雜的順序,詳細描述了各種場景下,MySQL數據庫如何遷移到Amazon Aurora數據庫上。大家可以根據自己的實際場景,選擇自己最適合的方式進行數據庫的遷移。

作者:韓思捷

來源:

https://aws.amazon.com/cn/blogs/china/every-scene-mysql-database-move-to-amazon-aurora/?from=singlemessage&isappinstalled=0

dbaplus社群歡迎廣大技術人員投稿,投稿郵箱:[email protected]

掌握數據庫運維新思維,獲得更優操作啟發

不妨來這些技術大會學點獨家技能

↓↓掃碼可瞭解更多詳情及報名↓↓

2019 Gdevops全球敏捷運維峰會-北京站

2019 DAMS中國數據智能管理峰會-上海站

各種場景下從MySQL數據庫遷移到Amazon Aurora

相關推薦

推薦中...