Устранение неполадок с повреждением базы данных в База данных Azure для MySQL — гибкий сервер

Повреждение базы данных может привести к простою приложения. Также важно вовремя устранять проблемы с повреждением, чтобы избежать потери данных. При возникновении повреждения базы данных эта ошибка отображается в журналах сервера: InnoDB: Database page corruption on disk or a failed.

Из этой статьи вы узнаете, как устранить проблемы с повреждением базы данных или таблицы. База данных Azure для MySQL гибкий сервер использует подсистему InnoDB. В нем предусмотрены автоматизированные операции по проверке повреждений и ремонту. InnoDB проверяет наличие поврежденных страниц, вычисляя контрольные суммы на каждой прочитанной странице. Обнаружение несоответствия контрольной суммы автоматически приводит к остановке экземпляра сервера.

Попробуйте следующие варианты, чтобы быстро устранить проблемы с повреждением базы данных.

Перезагрузите ваш сервер 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]: ваш экземпляр гибкого сервера База данных Azure для MySQL.
  • [uname]: имя пользователя администратора вашего сервера.
  • [pass]: пароль для вашего администратора.
  • [dbname]: имя вашей базы данных.
  • [backupfile.sql]: имя файла резервной копии базы данных.

Внимание

  • Для База данных Azure для MySQL отдельный сервер используйте формат admin-user@servername для замены myserveradmin в следующих командах.
  • Для База данных Azure для MySQL гибкого сервера используйте формат 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]

Вот пример, который восстанавливает testdb из файла резервной копии, созданного с помощью mysqldump:

Внимание

  • Для База данных Azure для MySQL одного сервера используйте формат admin-user@servername для замены myserveradmin в следующей команде.
  • Для База данных Azure для MySQL гибкого сервера используйте формат admin-user для замены myserveradmin в следующей команде.
mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql