Udostępnij za pośrednictwem


Rozwiązywanie problemów z uszkodzeniem bazy danych w usłudze Azure Database for MySQL — serwer elastyczny

DOTYCZY: Azure Database for MySQL — pojedynczy serwer usługi Azure Database for MySQL — serwer elastyczny

Ważne

Pojedynczy serwer usługi Azure Database for MySQL znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do serwera elastycznego usługi Azure Database for MySQL. Aby uzyskać więcej informacji na temat migracji do serwera elastycznego usługi Azure Database for MySQL, zobacz Co się dzieje z usługą Azure Database for MySQL — pojedynczy serwer?

Uszkodzenie bazy danych może spowodować przestój aplikacji. Ważne jest również rozwiązanie problemów z uszkodzeniem w czasie, aby uniknąć utraty danych. Gdy wystąpi uszkodzenie bazy danych, ten błąd zostanie wyświetlony w dziennikach serwera: InnoDB: Database page corruption on disk or a failed.

Z tego artykułu dowiesz się, jak rozwiązywać problemy z uszkodzeniem bazy danych lub tabeli. Usługa Azure Database for MySQL — elastyczny serwer używa aparatu InnoDB. Oferuje ona automatyczne sprawdzanie uszkodzeń i operacje naprawy. Usługa InnoDB sprawdza uszkodzone strony, uruchamiając sumy kontrolne na każdej odczytalnej stronie. Jeśli wykryje niezgodność sumy kontrolnej, automatycznie zatrzyma wystąpienie serwera elastycznego usługi Azure Database for MySQL.

Wypróbuj następujące opcje, aby szybko rozwiązać problemy z uszkodzeniem bazy danych.

Uruchom ponownie serwer MySQL

Zwykle zauważysz, że baza danych lub tabela jest uszkodzona, gdy aplikacja uzyskuje dostęp do tabeli lub bazy danych. Usługa InnoDB zawiera mechanizm odzyskiwania awaryjnego, który może rozwiązać większość problemów po ponownym uruchomieniu serwera. Ponowne uruchomienie serwera może pomóc w odzyskaniu serwera po awarii, która spowodowała, że baza danych jest w złym stanie.

Używanie metody zrzutu i przywracania

Zalecamy rozwiązanie problemów z uszkodzeniem przy użyciu metody zrzutu i przywracania . Ta metoda obejmuje:

  1. Uzyskiwanie dostępu do uszkodzonej tabeli.
  2. Za pomocą narzędzia mysqldump utwórz logiczną kopię zapasową tabeli. Kopia zapasowa zachowa strukturę tabeli i dane w niej.
  3. Ponowne ładowanie tabeli do bazy danych.

Tworzenie kopii zapasowej bazy danych lub tabel

Ważne

Utwórz plik kopii zapasowej z poziomu wiersza polecenia przy użyciu narzędzia mysqldump. Użyj następującego polecenia:

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

Opisy parametrów:

  • [ssl-cert=/path/to/pem]: ścieżka do certyfikatu SSL. Pobierz certyfikat SSL na maszynie klienckiej i ustaw w nim ścieżkę w poleceniu . Nie używaj tego parametru, jeśli protokół SSL jest wyłączony.
  • [host]: Wystąpienie serwera elastycznego usługi Azure Database for MySQL.
  • [uname]: Nazwa użytkownika administratora serwera.
  • [pass]: hasło użytkownika administratora.
  • [dbname]: nazwa bazy danych.
  • [backupfile.sql]: nazwa pliku kopii zapasowej bazy danych.

Ważne

  • W przypadku pojedynczego serwera usługi Azure Database for MySQL zastąp myserveradmin format admin-user@servername w następujących poleceniach.
  • W przypadku serwera elastycznego usługi Azure Database for MySQL zastąp myserveradmin format admin-user w następujących poleceniach.

Jeśli określona tabela jest uszkodzona, wybierz określone tabele w bazie danych, aby utworzyć kopię zapasową:

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

Aby utworzyć kopię zapasową co najmniej jednej bazy danych, użyj przełącznika --database i wyświetl listę nazw baz danych oddzielonych spacjami:

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

Przywracanie bazy danych lub tabel

W poniższych krokach pokazano, jak przywrócić bazę danych lub tabele. Po utworzeniu pliku kopii zapasowej można przywrócić tabele lub bazy danych przy użyciu narzędzia mysql. Uruchom następujące polecenie:

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

Oto przykład przywracania testdb z pliku kopii zapasowej utworzonego za pomocą narzędzia mysqldump:

Ważne

  • W przypadku pojedynczego serwera usługi Azure Database for MySQL zastąp format admin-user@servername myserveradmin w poniższym poleceniu.
  • W przypadku serwera elastycznego usługi Azure Database for MySQL zastąp format admin-user myserveradmin w poniższym poleceniu.
$ mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql

Następne kroki

Jeśli powyższe kroki nie rozwiążą problemu, zawsze można przywrócić cały serwer: