移轉至 Databases for MySQL
有兩個選項可將資料從現有 MySQL 資料庫移轉至 IBM Cloud® Databases for MySQL。 我們建議兩個選項: mysqldump
和 mydumper
。 最適合您的工具取決於特定條件,包括網路連線、資料集大小及中間綱目需求。
開始之前
在開始資料移轉之前,您需要在本端安裝 MySQL ,以便您具有 mysql
及 mysqldump
工具。
MySQL 工作台 也提供圖形工具來使用 MySQL 伺服器及資料庫。 雖然並非嚴格需要, Cloud Databases CLI 也可讓您輕鬆連接及還原至新的 Databases for MySQL 部署。
mysqldump
依預設,這個原生 MySQL 用戶端公用程式會安裝,且可以執行邏輯備份、重新產生表格結構及資料,而不複製實際資料檔。 mysqldump 會傾出一個以上 MySQL 資料庫,以進行備份或傳送至另一個 MySQL 伺服器。 如需相關資訊,請參閱 mysqldump 文件。
在下列條件下,適合使用 mysqldump
:
- 資料集小於 10 GB。
- 移轉時間並不重要,且重試移轉的成本較低。
- 您不需要執行任何中間綱目或資料轉換。
如果符合下列任何條件,我們不建議 mysqldump:
- 您的資料集大於 10 GB。
- 來源與目標資料庫之間的網路連線不穩定或緩慢。
使用 mysqldump
工具來遵循下列步驟:
在來源資料庫上執行 mysqldump
,以建立可用來重建資料庫的 SQL 檔案。 使用 CLI 移轉 mysql
至少需要下列引數:
- 主機名稱 (
-h
旗標) - 埠號 (
-P
旗標) - 使用者名稱 (
-u
旗標) - -- ssl-mode = VERIFY_IDENTITY (用戶端需要加密連線,並對其憑證中的伺服器 CA 憑證及伺服器主機名稱執行驗證)
- -- ssl-ca (憑證管理中心 (CA) 檔案的路徑名稱,可在使用者介面中「 概觀 」頁面的「端點 CLI」標籤內找到。)
- 資料庫名稱
- 結果檔案 (
-r
旗標)
您的 CLI 指令看起來如下
mysqldump -h <host_name> -P <port_number> -u <user_name> --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p <database_name> -r dump.sql
若要產生 mysqldump 工作的日誌檔,以在執行時追蹤錯誤,請使用類似下列指令:
mysqldump -h <host_name> -P <port_number> -u <user_name> --log-error=error.log --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt --set-gtid-purged=OFF -p ibmclouddb -r dump.sql
匯入時可以執行相同的動作,例如
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql > import_logfile.log
For more information on using MySQL Replication with Global Transaction Identifiers (GTIDs), see the 使用 GTID 進行失效接手和橫向擴充 in the MySQL Reference Manual.
mysql
指令有許多選項; 請參閱正式文件 及 指令參考手冊 ,以取得其功能的更完整視圖。
還原 mysqldump 的輸出
然後, mysqldump
產生的輸出可以上傳至新的 Databases for MySQL 部署。 因為輸出是 SQL ,所以可以直接透過 mysql
指令傳送至資料庫。 建議以 admin 使用者身分執行匯入。
如需使用 mysql
以管理者身分進行連接的詳細資料,請參閱 使用 mysql
連接 文件。 若要使用 mysql
指令進行連接,您需要管理使用者的連線字串及 TLS 憑證,這兩者都可以在使用者介面中找到。 憑證需要從 base64 解碼,並儲存為任意本端檔案。
若要將先前建立的 dump.sql
匯入至名為 example-mysql
的資料庫部署,可以使用 -f dump.sql
作為參數來呼叫 mysql
指令。 此參數指示 mysql
讀取並執行檔案中的 SQL 陳述式。
如 使用 mysql
連接 文件中所述, Cloud Databases CLI 外掛程式可簡化連接。 可以使用如下指令來執行前一個 mysql
匯入:
mysql -h <host_name> -P <port_number> -u admin --ssl-mode=VERIFY_IDENTITY --ssl-ca=mysql.crt -p ibmclouddb < dump.sql
如果未指定任何使用者,指令會自動使用管理使用者,並以互動方式提示輸入密碼。 TLS 憑證會自動擷取並使用。
當還原處理程序正在執行時,會發出一些訊息,指出正在對資料庫部署進行變更。
mydumper
mydumper 及其配對邏輯備份工具 myloader 使用多執行緒作業功能來執行資料移轉,類似於 mysqldump; 不過, mydumper 提供許多改進,例如平行備份、一致讀取,以及更容易管理輸出。 平行化可在匯入及匯出處理程序期間提供更好的效能,而輸出則因為個別表格傾出至個別檔案而更容易管理。
mydumper 適合在下列條件下使用:
- 資料集大於 10 GB。
- 來源與目標資料庫之間的網路連線快速且穩定。
- 您需要執行中間綱目或資料轉換。
如果符合下列任何條件,我們不建議使用 mydumper:
- 您的資料集小於 10 GB。
- 來源與目標資料庫之間的網路連線不穩定或非常緩慢。
在開始使用 mydumper 來移轉資料之前,請先參閱 mydumper 專案 ,以取得安裝及必要開發人員環境的詳細資料及逐步指示。
接下來,請參閱 如何使用 mydumper 頁面,以取得使用 mydumper 和 myloader 工具來執行完整資料移轉的相關資訊。
調整 InnoDB 可配置變數
您可以配置下列 MySQL InnoDB 選項,以根據機器容量及資料庫工作量來調整效能。
- innodb_buffer_pool_size_percentage
- innodb_flush_log_at_trx_commit
- innodb_log_buffer_size
- innodb_log_file_size
- innodb_lru_scan_depth
- innodb_read_io_threads
- innodb_write_io_threads
- net_read_timeout
- 網路寫入逾時
innodb_buffer_pool_size_percentage
- 說明:
innodb_buffer_pool_size_percentage value
參數定義資料庫儲存器的專用記憶體數量。 - 預設值: 50
- 上限: 100
- 最小值:10
- 需要重新啟動: True
當資料庫本身使用給定的記憶體數量時,如果 innodb_buffer_pool_size_percentage value
參數配置太高,則資料庫記憶體需求 + innodb_buffer_pool_size_percentage
可能會變得高於可用的記憶體限制,導致記憶體不足 (OOM)。
innodb_buffer_pool_size_percentage
參數值根據資料庫大小而有所不同。 預設值為 50%
,對於所有大小的資料庫而言都是安全的。 視需要配置值; 如果您遇到 OOM ,則該值設定太高,您應該降低它。
innodb_flush_log_at_trx_commit
-
說明: 控制確定作業的嚴格 ACID 相符性與更高效能之間的平衡
-
預設值: 2
預設值 2 並不完全符合 ACID 標準 (完整 ACID 標準需要預設值 1) ,但效能更高且仍然安全。
- 最大值: 2
- 最小值:0
- Requires restart: False
如需相關資訊,請參閱 MySQL innodb_flush_log_at_trx_commit 文件。
innodb_log_buffer_size
- 說明 :InnoDB 用來寫入磁碟上日誌檔的緩衝區大小 (以位元組為單位)。
- 預設值: 32 MiB
- 最大值: 4294967295
- 最小值: 1048576
- 需要重新啟動: True
如需相關資訊,請參閱 MySQL innodb_log_buffer_size 文件。
innodb_log_file_size
- 說明 :InnoDB 日誌檔大小 (以位元組為單位)。
- 預設值: 64 MB
- 最大值: 274877906900
- 最小值: 4194304
- 需要重新啟動: True
如需相關資訊,請參閱 MySQL innodb_log_file_size 文件。
innodb_lru_scan_depth
- 說明: 這個參數會影響 InnoDB 緩衝池之清除作業的演算法和啟發式。
- 預設值: 1024
- 最大值: 無最大值
- 最小值: 100
- 需要重新啟動: True
如需相關資訊,請參閱 MySQL innodb_lru_scan_depth 文件。
innodb_read_io_threads
- 說明 :InnoDB 中讀取作業的 I/O 執行緒數目。
- 預設值: 4
- 上限: 64
- min: 1
- 需要重新啟動: True
如需相關資訊,請參閱 MySQL innodb_read_io_threads 文件。
innodb_write_io_threads
- 說明 :InnoDB 中讀取作業的 I/O 執行緒數目。
- 預設值: 4
- 上限: 64
- min: 1
- 需要重新啟動: True
如需相關資訊,請參閱 MySQL innodb_write_io_threads 文件。
net_read_timeout
- 說明: 中斷讀取之前等待連線中更多資料的秒數。
- 預設值: 30
- 最大值:
- min: 1
- 需要重新啟動: True
如需相關資訊,請參閱 MySQL net_read_timeout 文件。
net_write_timeout
- 說明: 在中斷寫入之前等待區塊寫入連線的秒數。
- 預設值: 60
- 最大值:
- min: 1
- 需要重新啟動: True
如需相關資訊,請參閱 net_write_timeout
說明文件。