導出DRDS實例數據
更新時間 2024-12-11 10:07:40
最近更新時間: 2024-12-11 10:07:40
分享文章
本文介紹如何導出DRDS實例數據。
本文介紹了如何通過mysqldump 工具導出DRDS實例數據,并生成一個包含所有數據以及表結構的 SQL 文件。本方案適用于需要將 DRDS 實例中的數據備份、遷移或導出到其他系統的場景。
使用場景
- 數據備份:將 DRDS 實例中的數據導出到 SQL 文件,用于長期保存或備份。
- 數據遷移:將 DRDS 數據導出為 SQL 文件后,遷移至其他數據庫系統。
約束與限制
- 業務暫停:為確保導出數據的一致性,建議在業務低峰期執行導出操作,并在導出前暫停業務。
- 權限要求:進行數據導出時,確保使用的DRDS數據庫用戶對該schema擁有SELECT權限。
- 存儲空間:確保目標存儲有足夠的空間保存導出的 SQL 文件,特別是在數據量較大的情況下。
- 為防止因會話超時問題導致mysqldump提前退出,導出不完整的數據文件,建議在系統后臺執行導出命令:
nohup {mysqldump 命令行} &
數據導出步驟
步驟一:導出表結構
如果需要導出 DRDS 實例中的表結構,不包含數據,可以使用以下命令。該命令將生成一個包含所有指定表結構的 SQL 文件:
mysqldump -h {DBPROXY_IP} -P {DBPROXY_PORT} -u {DB_USER} -p --no-data --skip-lock-tables --set-gtid-purged=OFF --default-auth=mysql_native_password --skip-tz-utc --no-tablespaces {DB_NAME} {TABLE_NAME} > {drds_table_structure.sql}
MySQL客戶端版本為8.0時請執行以下命令:
mysqldump -h {DBPROXY_IP} -P {DBPROXY_PORT} -u {DB_USER} -p --no-data --skip-lock-tables --set-gtid-purged=OFF --default-auth=mysql_native_password --column-statistics=0 --skip-tz-utc --no-tablespaces {DB_NAME} {TABLE_NAME} > {drds_table_structure.sql}
步驟二:導出數據庫數據
如果需要導出 DRDS 實例中的數據,可以使用以下命令。該命令將生成一個包含所有指定數據的 SQL 文件,如果只需要導出指定表的數據,可以在命令中指定表名,如下所示:
mysqldump -h {DBPROXY_IP} -P {DBPROXY_PORT} -u {DB_USER} -p \
--skip-lock-tables --add-locks=false --hex-blob --complete-insert --set-gtid-purged=OFF --quick --no-tablespaces --no-create-info --skip-comments --skip-tz-utc --no-set-names --ignore-table={DB_NAME}._sys_global_sequence_
{DB_NAME} {TABLE_NAME} > {drds_table_data.sql}
參數說明
| 參數 | 參數說明 | 備注 |
|---|---|---|
| DBPROXY_IP | 待導出的DRDS的VIP。 | 必填。 |
| DBPROXY_PORT | 待導出的DRDS的端口。 | 必填。 |
| DPROXY_USER | 待導出的DRDS的用戶名。 | 必填。 |
| DB_NAME | 邏輯schema名稱。 | 必填。 |
| TABLE_NAME | 表名。 | 可選。如有必要,可以多個同類型的表,用空格隔開。建議只導出與業務相關的表。 |
| drds_table_data.sql | 生成的表數據文件名。 | 必填。請確保每次導出的文件名不同,建議以“邏輯庫名”+“”+“邏輯表名”+“ ”+“data”格式命名,以免數據被覆蓋。建議后綴為.sql |
| --complete-insert | 使用完整的insert語句(包含列名稱)。 | 本場景保留。 |
| --single-transaction | 該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用于多版本存儲引擎,僅InnoDB。 | 本場景保留。 |
| --skip-tz-utc | 跳過與時區相關的設置。 防止導出時處理時區信息,尤其是與 UTC 有關的設置。 | 本場景保留。 |
| --no-tablespaces | 禁用與表空間相關的查詢。避免查詢 INFORMATION_SCHEMA.FILES 等表空間相關的表。 | 本場景保留。 |
| --quick | 不緩沖查詢,直接導出到標準輸出。避免大數據情況內存爆漲。 | 本場景保留。 |
| --hex-blob | 使用十六進制格式導出二進制字符串字段。如果有二進制數據就必須使用該選項。 | 本場景保留。 |
| --no-create-info | 只導出數據,而不添加CREATE TABLE 語句。導出數據時使用。 | 可選。如不需要導出表結構,可添加此參數。 |
| --no-data | 不導出數據。 | 可選。如不不需要導出數據,可添加此參數。 |
| --skip-comments | 關閉附加注釋信息。 | 本場景保留。 |
| --skip-lock-tables | 在不鎖表的情況下導出數據。某些參數會默認開啟加鎖聲明,因此建議在數據導出語句末尾增加此參數。 | 本場景保留。 |
| --add-locks=false | 導出的數據文件中不加鎖表的聲明。 | 本場景保留。 |
| --skip-add-locks | 在導出數據時,控制加鎖動作,以避免因耗能引起的性能問題。 | 本場景保留。 |
| --set-gtid-purged=OFF | 若使用的MySQL版本為8.0或5.7,則需要配置該參數。若5.6及以下,不用該參數。 | 本場景保留。 |
| --ignore-table={DB_NAME}.sys_global_sequence | 避免導出不需要的系統表,sys_global_sequence 是一個系統表,用于管理數據庫內部的序列或狀態數據,這些數據通常不需要備份或遷移。如不需要導出,可通過使用 --ignore-table 選項來避免導出這些表。 | 本場景保留。 |
| --where | 只轉儲給定的WHERE條件選擇的記錄。 | 可選。 |