如何解決我在 Amazon RDS for MySQL 或 MariaDB 上使用 mysqldump 時收到的錯誤?

2 分的閱讀內容
0

我正在使用執行 MySQL 或 MariaDB 的 Amazon Relational Database Service (Amazon RDS) 資料庫執行個體。我正在使用 mysqldump 匯入資料或匯出資料,但收到錯誤。如何對此錯誤進行疑難排解並加以解決?

簡短描述

使用 mysqldump 時,您可能會收到下列錯誤:

  • 無法執行 FLUSH TABLES WITH READ LOCK 錯誤
  • Max_allowed_packet 錯誤
  • SUPER 權限和 DEFINER 錯誤
  • 連線遺失或中止錯誤

解決方法

無法執行 FLUSH TABLES WITH READ LOCK 錯誤

--master-data 選項與 mysqldump 搭配使用來匯出資料時,您可能會收到類似下列內容的錯誤:

"mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'user'@'%' (using password: YES) (1045)"

--master-data 選項會取得 FLUSH TABLES WITH READ LOCK。這需要 Amazon RDS 主要使用者沒有的 SUPER 權限,而 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 來取得確切的日誌位置,因為停止複本確認資料庫位置不會變更。依照下列步驟,從此 RDS 資料庫執行個體的 Amazon RDS MySQL 僅供讀取複本建立 mysqldump。

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

2.    在僅供讀取複本上執行下列命令來停止複寫:

CALL mysql.rds_stop_replication;

3.    從僅供讀取複本中取得沒有 --master-data=2 的 mysqldump。

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

5.    如果您對應用程式使用複本,請使用下列預存程序重新開始 複寫:

CALL mysql.rds_start_replication;

如果不對應用程式使用複本,可以將其刪除。

Max_allowed_packet 錯誤

使用 mysqldump 匯出資料時,您可能會收到類似下列內容的錯誤:

"Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `tb_name` at row: XX"

當 mysqldump 命令要求大於為 RDS 資料庫執行個體設定的 max_allowed_packet 參數值的封包時,就會發生此錯誤。如需詳細資訊,請參閱 MySQL 文件中的 Packet too large

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

$ mysqldump --max_allowed_packet=1G ......

SUPER 權限和 DEFINER 錯誤

使用 mysqldump 將資料匯入正在執行 MySQL 或 MariaDB 的 RDS 資料庫執行個體時,您可能會收到類似下列內容的錯誤:

"ERROR 1227 (42000) at line XX: Access denied; you need (at least one of) the SUPER privilege(s) for this operation"

此錯誤表示下列一個或多個問題:

連線遺失或中止錯誤

使用 mysqldump 導入資料時,您可能會收到類似下列內容的錯誤:

"mysqldump: error 2013: lost connection to mysql server during query when dumping table"

-或-

"mysqldump: Aborted connection XXXXXX to db: 'db_name' user: 'master_user' host: 'XXXXXXX' (Got timeout writing communication packets)"

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


相關資訊

適用於 mysqldump 的 MySQL 文件

如何為 Amazon RDS MySQL 資料庫執行個體啟用函數、程序和觸發條件?