針對適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中的資料庫損毀進行疑難排解
資料庫損毀可能會導致應用程式的停機時間。 及時解決損毀問題,以避免資料遺失也很重要。 發生資料庫損毀時,您會在伺服器記錄中看到此錯誤: InnoDB: Database page corruption on disk or a failed.
在本文中,您會了解如何解決資料庫或資料表損毀問題。 適用於 MySQL 的 Azure 資料庫 彈性伺服器使用 InnoDB 引擎。 它提供自動化的損毀檢查和修復作業。 InnoDB 會在其讀取的每個頁面上執行總和檢查碼,以檢查損毀的頁面。 如果發現總和檢查碼不一致,它會自動停止 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例。
請嘗試下列選項,以快速減輕資料庫損毀問題。
重新啟動您的 MySQL 伺服器
當您的應用程式存取資料表或資料庫時,您通常會注意到資料庫或資料表已損毀。 InnoDB 提供當機修復機制,可在伺服器重新啟動時解決大部分的問題。 因此重新啟動伺服器可協助伺服器從會導致資料庫處於不良狀態的當機中復原。
使用傾印和還原方法
建議您使用傾印和還原方法來解決損毀問題。 這個方法牽涉到:
- 存取損毀的資料表。
- 使用 mysqldump 公用程式建立資料表的邏輯備份。 備份會保留資料表結構及其內部的資料。
- 將資料表重新載入至資料庫。
備份資料庫或資料表
重要
- 請確定您已設定防火牆規則,以從用戶端電腦存取伺服器。 如需詳細資訊,請參閱在 適用於 MySQL 的 Azure 資料庫 單一伺服器上設定防火牆規則,並在 適用於 MySQL 的 Azure 資料庫 彈性伺服器上設定防火牆規則。
- 如果 SSL 已啟用,請對 mysqldump 使用 SSL 選項
--ssl-cert
。
使用 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 資料庫 彈性伺服器,請使用下列命令中的 取代
myserveradmin
格式admin-user
。
如果特定資料表損毀,請選取資料庫中的特定資料表以備份:
$ 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 資料庫 彈性伺服器,請使用下列命令中的 取代
myserveradmin
格式admin-user
。
$ mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql