Назад | Перейти на главную страницу

Почему XtraBackup сообщает мне, что моя база данных MySQL повреждена?

Я пытаюсь создать резервную копию данных на узле MySQL Galera с помощью XtraBackup. К сожалению, инструмент сообщает мне, что ibdata1 поврежден. После двойной проверки я действительно нашел несколько таблиц myisam, которые импортировал по ошибке. Отбросил их и заменил на таблицы innodb. Однако ошибка остается (правда, теперь на другой странице)

xtrabackup version 2.2.12 based on MySQL server 5.6.24 Linux (x86_64) (revision id: 8726828)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /data/mysql/data
xtrabackup: open files limit requested 0, set to 1024
xtrabackup: using the following InnoDB configuration:
xtrabackup:   innodb_data_home_dir = ./
xtrabackup:   innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup:   innodb_log_group_home_dir = ./
xtrabackup:   innodb_log_files_in_group = 2
xtrabackup:   innodb_log_file_size = 50331648
>> log scanned up to (22054624442)
xtrabackup: Generating a list of tablespaces
[01] Copying ./ibdata1 to /data/backup/2015-09-02_15-23-50/ibdata1
[01] xtrabackup: Database page corruption detected at page 1320, retrying...

Я проверил повреждение базы данных и ничего не нашел. Возможно, возникла проблема с установкой Galera и XtraBackup?

Это может быть вызвано несколькими причинами.

  • Вы используете старую версию xtrabackup, в которой есть ошибка, которая может указывать на повреждение файлов данных, когда их нет, обновите до новейшей версии xtrabackup для вашей версии mysql.

  • Повреждение вторичных индексов в таблице

Если вы можете выполнить mysqldump таблиц, данные должны быть неповрежденными, и вам нужно либо запустить optimize table или перестройте таблицы. Определите повреждение файла ibd, проверив каждый файл ibd с помощью innochecksum и использовать pt-online-schema-schema-change приложение для восстановления таблиц

pt-online-schema-change --dry-run --alter="ENGINE=INNODB" \
    --user=your_username --ask-pass \
    D=databasename,t=tablename

Замените --dry-run на --execute, если хотите выполнить задачу.

  • Может быть вызвано шифрованием или сжатием, заданным в таблице

Оптимизировать таблицу: https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html

Инночексум: https://www.percona.com/blog/2015/03/16/deep-dive-mysqls-innochecksum-tool/

pt-онлайн-изменение схемы: https://www.percona.com/doc/percona-toolkit/LATEST/pt-online-schema-change.html