为什么 XtraBackup 告诉我我的 MySQL 数据库已损坏?

为什么 XtraBackup 告诉我我的 MySQL 数据库已损坏?

我正在尝试使用 XtraBackup 备份 MySQL Galera 节点上的数据。不幸的是,该工具告诉我,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 可能存在设置问题吗?

答案1

这可能是由几种不同的原因造成的。

  • 您正在使用旧的 xtrabackup 版本,该版本存在错误,当数据文件不存在时可能会标记数据文件损坏,请将您 mysql 版本的最新 xtrabackup 版本更新到最新版。

  • 表中的二级索引有损坏

如果您能够对表执行 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

Innochecksum: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

相关内容