首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >损坏的MySQL数据库,仅可使用innodb_force_recovery=6访问

损坏的MySQL数据库,仅可使用innodb_force_recovery=6访问
EN

Stack Overflow用户
提问于 2017-04-05 07:38:44
回答 1查看 1.3K关注 0票数 0

Ubuntu16.04LTS上的MySQL 5.7

数据库在我认为是不正确的系统关闭后被破坏了,最糟糕的时间试图恢复它。以前的系统管理员没有最近的备份,有些必要的是,我试着尽我所能来修复/恢复数据库。

MySQL服务器仅与:innodb_force_recovery=6一起运行

mysqldump给出了以下错误:

无法执行像‘gtid_mode’这样的显示变量:表'performance_schema.session_variables‘不存在(1146)

无法使用mysql_upgrade运行innodb_force_recovery=6

如果你有任何相关的问题,请问。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-05 16:32:40

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

当MySQL在任何页面中遇到损坏时,它通常会崩溃,所以最好是逐个转储表。

下面是一个单独转储表的脚本,您可以根据具体情况调整这些表。如果崩溃,它将重新启动MySQL,并在failed.txt中保存“坏”表的列表。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43224808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档