遷移準備
關系型數據庫服務支持開啟公網訪問功能,通過彈性公網IP進行訪問。您也可通過彈性云主機的內網訪問關系型數據庫。
1.準備彈性云主機或可通過公網訪問關系型數據庫。
- 通過彈性云主機連接關系型數據庫實例,需要創建一臺彈性云主機。
- 通過公網地址連接關系型數據庫實例,需具備以下條件。
- 先對關系型數據庫實例綁定公網地址。
- 保證本地設備可以訪問關系型數據庫實例綁定的公網地址。
2.在準備的彈性云主機或可訪問關系型數據庫的設備上,安裝MySQL客戶端。
說明該彈性云主機或可訪問關系型數據庫的設備需要安裝和RDS for MySQL數據庫服務端相同版本的數據庫客戶端,MySQL數據庫或客戶端會自帶mysqldump和mysql工具。
數據遷移到云數據庫RDS后可能要面對更改IP的問題,為減少客戶業務更改,降低遷移難度,支持更改內網IP。
云數據庫RDS的系統庫mysql和sys不支持導入到RDS for MySQL實例。
導出數據
要將源數據庫遷移到關系型數據庫,需要先對其進行導出。
說明?相應導出工具需要與數據庫引擎版本匹配。
?數據庫遷移為離線遷移,您需要停止使用源數據庫的應用程序。
步驟 1 登錄已準備的彈性云主機,或可訪問關系型數據庫的設備。
步驟 2 使用mysqldump將表結構導出至SQL文件。
說明mysql數據庫是關系型數據庫服務管理所必須的數據庫,導出表結構時,禁止指定--all-database參數,否則會造成數據庫故障。
mysqldump--databases < DB_NAME > --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u < DB_USER > -p -h < DB_ADDRESS > -P *< DB_PORT > |sed -e 's/DEFINER[ ] =[ ] [^ ] / /' -e 's/DEFINER[ ] =. FUNCTION/FUNCTION/' -e 's/DEFINER[ ] =. PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ] =. TRIGGER/TRIGGER/' -e 's/DEFINER[ ] =.EVENT/EVENT/' > <BACKUP_FILE>
- DB_NAME為要遷移的數據庫名稱。
- DB_USER為數據庫用戶。
- DB_ADDRESS為數據庫地址。
- DB_PORT為數據庫端口。
- BACKUP_FILE為導出生成的文件名稱。
根據命令提示輸入數據庫密碼。
示例如下:
mysqldump --databases rdsdb --single-transaction --order-by-primary --hex-blob --no-data --routines --events --set-gtid-purged=OFF -u root -p -h 192.168.151.18 -P 3306 |sed -e 's/DEFINER[ ] =[ ] [^ ]*/ /' -e 's/DEFINER[ ] =. FUNCTION/FUNCTION/' -e 's/DEFINER[ ] =. PROCEDURE/PROCEDURE/' -e 's/DEFINER[ ] =. TRIGGER/TRIGGER/' -e 's/DEFINER[ ] =.EVENT/EVENT/' > dump-defs.sql
Enter password:
說明若使用的mysqldump低于5.6版本,需要去掉“--set-gtid-purged=OFF”。
命令執行完會生成“dump-defs.sql”文件,如下:
[rds@localhost ~]$ ll dump-defs.sql
-rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-defs.sql
步驟 3 使用mysqldump將數據導出至SQL文件。
說明mysql數據庫是關系型數據庫服務管理所必須的數據庫,導出數據時,禁止指定--all-database參數,否則會造成數據庫故障。
mysqldump --databases < DB_NAME > --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers-u < DB_USER > -p-h < DB_ADDRESS > -P < DB_PORT > -r < BACKUP_FILE >
以上命令的參數說明如步驟2所示。
根據命令提示輸入數據庫密碼。
示例如下:
mysqldump --databases rdsdb --single-transaction --hex-blob --set-gtid-purged=OFF --no-create-info --skip-triggers -u root -p -h 192.168.151.18 -P 8635 -r dump-data.sql
說明若使用的mysqldump低于5.6版本,需要去掉“--set-gtid-purged=OFF”。
命令執行完會生成“dump-data.sql”文件,如下:
[rds@localhost ~]$ ll dump-data.sql
-rw-r-----. 1 rds rds 2714 Sep 21 08:23 dump-data.sql
導入數據
通過彈性云主機或可訪問關系型數據庫的設備,用相應客戶端連接關系型數據庫實例,將導出的SQL文件導入到關系型數據庫。
說明如果源數據庫中包含觸發器、存儲過程、函數或事件調用,則需確保導入前設置目標數據庫參數log_bin_trust_function_creators=ON。
步驟 1 登錄已準備的彈性云主機,或可訪問關系型數據庫的設備。
步驟 2 導入表結構到關系型數據庫。
#mysql -f -h <RDS_ADDRESS> -P < DB_PORT >-uroot -p < <BACKUP_DIR> /dump-defs.sql
- RDS_ADDRESS為關系型數據庫實例的IP地址。
- DB_PORT為當前數據庫實例的端口。
- BACKUP_DIR為“dump-defs.sql”所在目錄。
示例如下:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-defs.sql
Enter password:
說明如果是將單表導出的數據(即導出的SQL是某一張表的SQL語句,不包含數據庫)再進行導入,建議指定待導入的數據庫(mydb),否則可能會報錯“No database selected”。示例:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p mydb < dump-defs.sql
Enter password:
步驟 3 導入數據到關系型數據庫。
mysql -f -h <RDS_ADDRESS> -P < DB_PORT >-uroot -p< <BACKUP_DIR> /dump-data.sql
- RDS_ADDRESS為關系型數據庫實例的IP地址。
- DB_PORT為當前數據庫實例的端口。
- BACKUP_DIR為“dump-data.sql”所在目錄。
示例如下:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p < dump-data.sql
Enter password:
說明如果是將單表導出的數據(即導出的SQL是某一張表的SQL語句,不包含數據庫)再進行導入,建議指定待導入的數據庫(mydb),否則可能會報錯“No database selected”。示例:
# mysql -f -h 172.16.66.198 -P 3306 -u root -p mydb < dump-defs.sql
Enter password:
步驟 4 查看遷移結果。
mysql> show databases;
示例中,名為rdsdb的數據庫已經被導入了:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| rdsdb |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)