跳至內容

如何解決 Amazon RDS MySQL 或 MariaDB 上的 mysqldump 錯誤?

2 分的閱讀內容
0

當我在 Amazon Relational Database Service (Amazon RDS) 上使用 mysqldump 匯入或匯出資料時,想疑難排解錯誤。

解決方法

使用以下解決方法步驟,解決您的錯誤。

無法啟動 FLUSH TABLES WITH READ LOCK 錯誤

當您使用 mysqpdump 並搭配 —master-data 選項匯出資料時,—master-data 選項會取得 FLUSH TABLES WITH READ LOCK。這需要 SUPER 權限,而 Amazon RDS 主要使用者沒有此權限。Amazon RDS 不支援 GLOBAL READ LOCK。當 MySQL 執行 CHANGE MASTER TO 命令時,二進位日誌檔名稱與位置會記錄在 mysqldump 檔案中。如需更多資訊,請參閱 MySQL 網站上的 ER_ACCESS_DENIED_ERROR

若要解決此錯誤,請移除 —master-data 選項。在您移除此選項時,系統不會為您提供在 mysqldump 中的精確日誌位置。若要解決此問題,請在您的應用程式停止時取得 mysqldump,或從 Amazon RDS 僅供讀取複本中取得 mysqldump。這可讓您在執行 SHOW SLAVE STATUS 命令時取得精確的日誌位置。因為當您停止複本時,此動作會確認 binlog 位置不會變更。若要從此 RDS 資料庫執行個體的 Amazon RDS MySQL 讀取複本建立 mysqldump,請完成以下步驟:

  1. 設定二進位日誌保留的值。

  2. 在讀取複本上執行以下命令以停止複寫:

    CALL mysql.rds_stop_replication;
  3. 從讀取複本建立 mysqldump,且不使用 —master-data=2

  4. 在複本上執行 SHOW SLAVE STATUS 命令,並擷取 Master_Log_FileExec_Master_Log_Pos

  5. 如果您將複本用於您的應用程式,請執行以下命令以重新啟動複寫:

    CALL mysql.rds_start_replication;

    如果您未將複本用於您的應用程式,則可以刪除該複本。

Max_allowed_packet 錯誤

當 mysqldump 命令要求的封包大於您 RDS 資料庫執行個體上所設定的 max_allowed_packet 參數值時,就會發生 max_allowed_packet 錯誤。如需更多資訊,請參閱 MySQL 網站上的封包過大

若要解決此錯誤,請增加 max_allowed_packet 的全域值。 或在該工作階段的 mysqldump 中設定 max_allowed_packet (而不是為整個資料庫設定全域值)。例如,您可以將命令修改為類似以下內容:

$ mysqldump --max\_allowed\_packet=1G ......

SUPER 權限與 DEFINER 錯誤

此錯誤顯示以下一個或多個問題:

連線錯誤

如需有關此錯誤的原因和解決方法的詳細資訊,請參閱如何解決連線至 Amazon RDS MySQL 資料庫執行個體時的「MySQL server has gone away」錯誤?

相關資訊

MySQL 網站上的 mysqldump

如何為 Amazon RDS for MySQL 資料庫執行個體開啟函式、程序與觸發程序?