损坏的MySQL数据库,只有innodb_force_recovery = 6才能访问

时间:2017-04-05 07:38:44

标签: mysql database innodb corruption

MySQL 5.7 on Ubuntu 16.04 LTS

数据库在我认为是系统关闭不当之后已经损坏,最糟糕的时间是尝试恢复它。以前的系统管理员没有最近的备份,有些必要,我尽我所能来修复/恢复数据库。

MySQL服务器只能运行:innodb_force_recovery=6

mysqldump给出了这个错误:

  

无法执行'显示变量类似于gtid_mode'':表   ' performance_schema.session_variables'不存在(1146)

无法使用mysql_upgrade

运行innodb_force_recovery=6

如果您有任何相关问题,请询问。

1 个答案:

答案 0 :(得分:0)

此时唯一的选择是从转储中提取数据并重新创建InnoDB数据库。

当MySQL遇到任何页面中的损坏时,它经常会崩溃,因此最好逐个转储表。

这是一个单独转储表的脚本,您可以根据具体情况进行调整。如果它崩溃,它将重启MySQL,并在set -eux edir=export function ensure_mysqld() { mysql -e 'select 1' && return service mysql start timeout=300 while [[ $timeout -gt 0 ]] do mysql -e 'select 1' && return sleep 1 timeout=$(( $timeout - 1 )) done echo "failed to start MySQL" exit 1 } for d in $(cat databases) do mkdir -p $edir/$d set +e ensure_mysqld set -e for t in $(mysql -S $socket -NBe "select TABLE_NAME from information_schema.TABLES WHERE TABLE_SCHEMA='$d' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE'") do ensure_mysqld mysqldump --skip-lock-tables $d $t > $edir/$d/$t.sql || echo "$d.$t" >> failed.txt done done 中保存“坏”表的列表。

char