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

來源:知乎
作者:AWS云計算
時間:2020-08-17
3180
本文描述了在各種不同的場景下,如何把MySQL數據庫的數據遷移到Amazon Aurora里。

隨著Amazon Aurora數據庫被客戶從認識到認可,越來越多的企業(yè)客戶在完成功能和性能的驗證以后,會考慮把他們在生產環(huán)境中運行的MySQL數據庫遷移到Amazon Aurora數據庫上。本文描述了在各種不同的場景下,如何把MySQL數據庫的數據遷移到Amazon Aurora里。以下內容的描述,如果沒有特別說明,都是基于AWS的us-west-2區(qū)進行介紹,并且按照從簡單到復雜的順序對各種場景進行描述。

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

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

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

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

v2-a40c72c963f9a6e0d21cdcd4a2250779_720w.png

v2-0f86c1bc0a41d4091460f6c79e6738f7_720w.png

3)根據快照恢復出一個Aurora數據庫??梢允褂脠D形界面操作,在數據庫列表中,選中之前創(chuàng)建快照的數據庫實例,Actions下來列表中選擇Migrate snapshot,如下圖所示。

v2-0b31bd2fbbb382f32a095a1200469b8e_720w.png

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

v2-99fe31e8a1d2045f0f5c559efb88399f_720w.png

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

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

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

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

v2-63b2764e976f0a425ea0bd404d3cad9f_720w.png

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

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

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

show slave statusG

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

v2-db8c339456507ac40f40152ae91cd4f6_720w.png

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

v2-7e98db7ca3dccee684af2de2fe985ea2_720w.png

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

修改應用程序的數據庫連接字符串,使其指向Aurora數據庫,并啟動應用程序,從而開始在生產環(huán)境中使用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)執(zhí)行Percona XtraBackup命令,創(chuàng)建備份。比如下面的例子:

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服務進行上傳。

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

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

v2-d88ed67a786eb6ae8333b565886ea1ea_720w.png

b.選擇Aurora引擎

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

v2-3bebbc3a987b96075ddc0eb996b5b9ca_720w.png

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

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

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

如果客戶是在EC2或者本地數據中心自己部署的MySQL數據庫,希望遷移到Amazon Aurora數據庫,同時沒有足夠的停機時間來通過備份恢復的方式完成整個遷移。這種場景相對比較復雜,通??梢允褂脙煞N方式來進行最小時間停機的遷移。

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

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

v2-d952c26b0ca60a0bb959671110df15a1_720w.png

2)MySQL主,Aurora從的關系建立起來以后,持續(xù)進行數據同步,如下圖所示。在這個階段,Aurora數據庫只能進行讀操作,不能進行寫操作,可以把Aurora的read_only參數設置為1強制只讀,或者也可以保持0,而是從應用程序端進行控制,禁止其在Aurora數據庫里進行寫操作。

v2-e7534189b97d211a28a2bdb8f364a902_720w.png

3)當需要進行切換的時候,也就是業(yè)務低谷的時候,停止應用程序在源MySQL數據庫里的寫入操作,然后等到Aurora從庫的數據與MySQL主庫的數據完全一致以后,修改應用程序的連接字符串,使其指向Aurora從庫,使得Aurora數據庫變?yōu)橹饕膶懭霐祿欤ㄈ绻阒鞍袮urora數據庫的read_only設置為了1,則需要把其改回到0,從而允許寫入Aurora數據庫)。而原來的MySQL數據庫則可以被銷毀。該階段如下圖所示。

v2-bf0206867f3d4715561c19c3c6e453ef_720w.png

具體操作過程如下:

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數據庫,并執(zhí)行下面的存儲過程,從而把Aurora數據庫配置為MySQL的副本。注意這里的mysql-bin.000001和1024就是從xtrabackup_binlog_info文件中找出來的、備份的時候的日志點的信息。

CALL mysql.rds_stop_replication;

CALL mysql.rds_set_external_master(

'172.31.20.125'

,'3306'

,'repadmin'

,'&lt;password&gt;'

,'mysql-bin.000001'

,'1024'

,0

);

CALL mysql.rds_start_replication;

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

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

AWS Database Migration Service(DMS)服務可以幫助客戶在最小停機時間的情況下,采用在源庫上捕獲變化數據,并在目標庫上應用變化數據的形式,進行數據庫的整體遷移。DMS不僅可以進行相同數據庫引擎的遷移,同時還支持不同數據庫引擎之間的遷移。不過DMS只能遷移數據本身,其他數據庫對象,比如存儲過程等,是不能遷移的。需要手工在目標數據庫里創(chuàng)建。

具體操作過程如下所示:

1)創(chuàng)建復制實例。復制實例的目的在于管理DMS在運行復制過程中的一些元數據。創(chuàng)建過程如下圖所示。

v2-16641c8a57c0fc3a3262d70b5a728122_720w.png

在DMS的主頁上,選擇Replication instances,然后在右邊點擊Create replication instance按鈕。在顯示的界面上輸入DMS實例相關的一些信息,比如實例名稱,實例大小等。需要注意的是,如果需要傳輸的數據量比較大,同時源數據庫上有較大的工作壓力的話,應該選擇較大的機型。

2)創(chuàng)建source endpoint,指向源數據庫。

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

v2-a07a552f4a90bf49b3bc68ea0330ce65_720w.png

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

v2-3a22d993de537f44decb65f79806d442_720w.png

點擊創(chuàng)建endpoint按鈕從而創(chuàng)建source endpoint。

v2-2cffe2ec9ef9084326a0ef7d398c0a95_720w.png

創(chuàng)建了source endpoint以后,我們可以進行連接測試:

v2-6fe2a61a181d1ddff7cc7ad79d70ab71_720w.png

3)創(chuàng)建target endpoint,指向目標數據庫。

先創(chuàng)建一個空的、不包含業(yè)務數據的Aurora數據庫作為目標庫,然后創(chuàng)建一個類型為target endpoint、并指向該Aurora數據庫的endpoint。

v2-b1267b0c9f2fb6f672078e6fe89eabb2_720w.png

當target endpoint創(chuàng)建完畢以后,我們可以進行連接測試:

v2-2995dedcb8b165c0c064f3470ed11f01_720w.png

4)創(chuàng)建task,啟動復制任務。

創(chuàng)建了源和目標endpoint以后,可以開始創(chuàng)建復制任務。選擇Database migration tasks鏈接,然后選擇Create task按鈕。

v2-d2488afb2fe5cfde21a6ba0749ddecda_720w.png

在創(chuàng)建任務的界面上,選擇之前創(chuàng)建的source endpoint和target endpoint,migration type選擇Migrating existing data and replicate ongoing changes,同時選擇Enable CloudWatch logs復選框。在Selection rules部分,我們指定把MySQL里的myaurora數據庫的數據復制到Aurora里,如下圖所示:

v2-97386d630292b4813f1c5be82d9a6c5a_720w.png

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

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

v2-9de5831a4066506aac1f90458a4d9abf_720w.png

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

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

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

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

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

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

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

結論

本文按照從簡單到復雜的順序,詳細描述了各種場景下,MySQL數據庫如何遷移到Amazon Aurora數據庫上。客戶可以根據自己的實際場景,選擇自己最適合的方式進行數據庫的遷移。如果你喜歡今天的文章,也請多多和我們互動,評論,點贊~

本篇作者

v2-c05fc9673941a4c1e27d38abf95d32aa_720w.jpg

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

原文鏈接:點擊前往 >
版權說明:本文內容來自于知乎,本站不擁有所有權,不承擔相關法律責任。文章內容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯系管理員(zzx@kchuhai.com)刪除!
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家