Share via


針對適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中的資料庫損毀進行疑難排解

適用於:適用於 MySQL 的 Azure 資料庫 - 單一伺服器適用於 MySQL 的 Azure 資料庫 - 彈性伺服器

重要

適用於 MySQL 的 Azure 資料庫單一伺服器已位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱 適用於 MySQL 的 Azure 資料庫單一伺服器發生了什麽情況?

資料庫損毀可能會導致應用程式的停機時間。 及時解決損毀問題,以避免資料遺失也很重要。 發生資料庫損毀時,您會在伺服器記錄中看到此錯誤: InnoDB: Database page corruption on disk or a failed.

在本文中,您會了解如何解決資料庫或資料表損毀問題。 適用於 MySQL 的 Azure 資料庫彈性伺服器會使用 InnoDB 引擎。 它提供自動化的損毀檢查和修復作業。 InnoDB 會在其讀取的每個頁面上執行總和檢查碼,以檢查損毀的頁面。 如果發現總和檢查碼不一致,它會自動停止適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體。

請嘗試下列選項,以快速減輕資料庫損毀問題。

重新啟動您的 MySQL 伺服器

當您的應用程式存取資料表或資料庫時,您通常會注意到資料庫或資料表已損毀。 InnoDB 提供當機修復機制,可在伺服器重新啟動時解決大部分的問題。 因此重新啟動伺服器可協助伺服器從會導致資料庫處於不良狀態的當機中復原。

使用傾印和還原方法

建議您使用傾印和還原方法來解決損毀問題。 這個方法牽涉到:

  1. 存取損毀的資料表。
  2. 使用 mysqldump 公用程式建立資料表的邏輯備份。 備份會保留資料表結構及其內部的資料。
  3. 將資料表重新載入至資料庫。

備份資料庫或資料表

重要

使用 mysqldump 從命令列建立備份檔案。 使用此命令:

$ mysqldump [--ssl-cert=/path/to/pem] -h [host] -u [uname] -p[pass] [dbname] > [backupfile.sql]

參數描述:

  • [ssl-cert=/path/to/pem]:SSL 憑證的路徑。 在用戶端電腦上下載 SSL 憑證,並在命令中設定路徑。 如果 SSL 已停用,則請勿使用此參數。
  • [host]: 您的適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體。
  • [uname]:您的伺服器管理使用者名稱。
  • [pass]:您的管理使用者的密碼。
  • [dbname]:您的資料庫名稱。
  • [backupfile.sql]:資料庫備份的檔案名稱。

重要

  • 針對適用於 MySQL 的 Azure 資料庫單一伺服器,請使用格式 admin-user@servername 取代下列命令中的 myserveradmin
  • 針對適用於 MySQL 的 Azure 資料庫彈性伺服器,請使用格式 admin-user 取代下列命令中的 myserveradmin

如果特定資料表損毀,請選取資料庫中的特定資料表以備份:

$ mysqldump --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb table1 table2 > testdb_tables_backup.sql

若要備份一或多個資料庫,請使用 --database 參數,並列出資料庫名稱 (以空格分隔):

$ mysqldump --ssl-cert=</path/to/pem>  -h mydemoserver.mysql.database.azure.com -u myserveradmin -p --databases testdb1 testdb3 testdb5 > testdb135_backup.sql

還原資料庫或資料表

下列步驟示範如何還原資料庫或資料表。 建立備份檔案之後,您可以使用 mysql 公用程式來還原資料表或資料庫。 執行此命令:

mysql  --ssl-cert=</path/to/pem> -h [hostname] -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]

以下是從使用 mysqldump 建立的備份檔案還原 testdb 的範例:

重要

  • 針對適用於 MySQL 的 Azure 資料庫單一伺服器,請使用格式 admin-user@servername 取代下列命令中的 myserveradmin
  • 針對適用於 MySQL 的 Azure 資料庫彈性伺服器,請使用格式 admin-user 取代下列命令中的 myserveradmin
$ mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql

下一步

如果上述步驟無法解決問題,您一律可以還原整個伺服器: