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
如果您有任何相关问题,请询问。
答案 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