使用mysqldump遷移MySQL數據
說明:本章節會介紹如何使用mysqldump遷移MySQL數據庫數據
關系型數據庫服務支持開啟公網訪問功能,通過彈性公網IP進行訪問。您也可通過彈性云服務器的內網訪問關系型數據庫。
1、準備彈性云服務器或可通過公網訪問關系型數據庫。
通過彈性云服務器連接關系型數據庫實例,需要創建一臺彈性云服務器。通過公網地址連接關系型數據庫實例,需具備以下條件:
(1)先對關系型數據庫實例綁定公網地址。
(2)保證本地設備可以訪問關系型數據庫實例綁定的公網地址。
2、在準備的彈性云服務器或可訪問關系型數據庫的設備上,安裝MySQL客戶端。

該彈性云服務器或可訪問關系型數據庫的設備需要安裝和RDS MySQL數據庫服務端相同版本的數據庫客戶端,MySQL數據庫或客戶端會自帶mysqldump和mysql工具。
要將源數據庫遷移到關系型數據庫,需要先對其進行導出。

相應導出工具需要與數據庫引擎版本匹配。
數據庫遷移為離線遷移,您需要停止使用源數據庫的應用程序。
登錄已準備的彈性云服務器,或可訪問關系型數據庫的設備。
使用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
使用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。
導入元數據到關系型數據庫。
先用mysql工具連接關系型數據庫實例,輸入密碼后,執行導入命令。
# mysql -f -h <RDS_ADDRESS> -P <DB_PORT> -u root -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:
導入數據到關系型數據庫。
# mysql -f -h <RDS_ADDRESS> -P <DB_PORT> -u root -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:
查看遷移結果。
mysql> show databases;
示例中,名為my_db的數據庫已經被導入了:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| my_db |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)