首页 > 数据库 >centos/windows服务器,Mysql数据库表结构损坏-已解决

centos/windows服务器,Mysql数据库表结构损坏-已解决

时间:2022-08-15 23:11:24浏览次数:59  
标签:FORCE centos 启动 windows 数据库 Mysql SRV mysql 备份

【问题原因】服务器突然断电
【故障报告】数据库表结构损坏
【解决思路】进入强制恢复模式,备份库表及数据重建

故障发现

周末公司断电,周一启动数据库就直接报错了

image.png
查看日志

image.png

image.png

image.png

上面标记的log,明确表示是非正常关机(InnoDB: Database was not shutdown normally!)导致表结构损坏了,并且在最后给出了三种修复建议:
1)权限问题。我的文件无此类问题,略过该方案
2)跳过当前表恢复。我出错的表比较重要,全额无法通过备份恢复,所以该方案也不合适
3)调整强制恢复级别,强制修复表结构。我后续的处理,使用了选择了该方案。

备注:断电时往往数据结构都还是好的,只是mysql事务未完成,有坏的数据在这里,所以有错误。 理论上只要修复表结构、去除坏的数据,mysql就可以正常恢复了。

处理故障

如上所述,权衡之后,我采用了强制启动+导出数据重建的方式。

调整强制恢复级别

找到配置进入编辑模式:# vim /etc/my.cnf

在[mysqld]配置项下面配置(配置前需要检查,如果配置文件中已有该配置,将值改为6;如果没有则新增这项配置。)

image.png

配置文件中调整级别:(配置前需要检查,如果配置文件中已有该配置,将值改为6;如果没有则新增这项配置。)

因为之前也遇到过类似问题,低级别恢复失败了。所以我这里直接使用级别6:跳过启动检测直接进行库表重建。
如果是其他情况的启动异常,具体问题分析后再确定采用哪个级别。

innodb_force_recovery参数说明:

影响整个InnoDB存储引擎的恢复状况,默认值为0,表示当需要恢复时执行所有的恢复操作。 当不能进行有效的恢复操作时,MySQL有可能无法启动,并记录下错误日志。

innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。 当设置参数值大于0后,可以对表进行select/create/drop操作,但insert/update/delete这类操作是不允许的。

1 (SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页

2 (SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash

3 (SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。

4 (SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。

5 (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。

6 (SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。
启动MySQL

配置改好后,就可以启动了。

启动方式选择常用的即可,但不能重复执行,否则提示进程已存在。

/etc/init.d/mysql start(在centos7.0以上版本已被systemctl start mysqld.service替代)
或者
service mysql start

正常启动后,注意此时我们只是跳过了启动检查,表数据仍然是坏的。新的数据读写操作进来,仍然可能会出错,甚至导致脏数据滚雪球般放大。因此需要修复数据
修复数据文件

修复数据采用的是导出后重建。

导出数据方式一
使用mysqldump命令导出:

image.png

如果数据顺利导出了,可以直接查看下一节重建。

导出数据方式二

使用navicat数据库连接工具远程连接数据库。

image.png

常见问题

提示密码过期

操作时出现了密码过期的提示:

尝试直接登录数据库后,没问题,但任何操作都会提示重设密码:

原因暂时不清楚,毕竟只是断电,没有数据库升级或其他动作。我直接按提示重设密码

能正常读了,接着执行备份:

执行命令:mysqldump -uroot -p --default-character-set=utf8 acc > ./acc.sql

输入密码,备份成功。

如果损坏的是MySQL系统表,无法dump

重建

此时数据已备份好,最大的风险已经没有了。

为了保险起见,接下来的操作前,可以把数据文件备份。

zip -r mysql_bak.zip /var/lib/mysql 或者直接将MySQL家目录改名(因为目前数据库已停止,不需要关闭数据库) mv /var/lib/mysql /var/lib/mysql_bak-user-date

有的人建议直接直接物理删除目录和里面的frm与ibd文件,找到mysql的data目录,找到目标库,删除整个目录,但是我没有成功。

我建议直接完全卸载mysql,直接重装数据库,因为我们现在最重要的数据已经备份出来了。这种方法百试不爽,从来没有失败过。

卸载数据库(注意使用脚本前修改相应的目录路径)

#!/bin/bash

#SelfDir
SelfDir=$(cd "$(dirname "$0")";pwd) 
echo "cerrent path is :${SelfDir}"

mysql='mysql'


if [ `rpm -qa | grep -i $mysql | wc -l` -ne 0 ]
then 
echo " installed  mysql "
service mysql stop
EXISTS_RPMS=`rpm -qa | grep -i mysql`
echo ${EXISTS_RPMS}
for RPM in ${EXISTS_RPMS}

do
 rpm -e --nodeps ${RPM}

done
## 删除残留文件
rm -fr /usr/lib/mysql
rm -fr /usr/include/mysql
rm -f /etc/my.cnf
rm -fr /var/lib/mysql
rm -f /root/.mysql_secret
else 

echo "start install mysql ...." 

fi


echo 'finished!'

重装MYSQL(这里就不演示了,需要安装之前部署的mysql版本,可以在网上查mysql安装部署)

导入备份数据

将my.cnf中的innodb_force_recovery配置改为0或直接删掉(无该配置项时MySQL默认为0)

然后重建数据库

image.png

成功完成还原。

启动应用服务正常,数据库访问正常。

整个恢复过程基本完成。

windwos服务器的恢复流程与上述一样,只是服务的启停方式,文件后缀名,卸载安装操作不一样而已

windwos启停mysql net start/stop mysql或者到“服务”中启动,停止
windwos配置文件 my.ini

标签:FORCE,centos,启动,windows,数据库,Mysql,SRV,mysql,备份
From: https://www.cnblogs.com/crly-shell/p/16590013.html

相关文章

  • 解决WINDOWS防火墙开启后Ping不通
    WINDOWS系统由于安全考虑,当开启防火墙时,默认不允许外主机对其进行ping功能,即别的电脑ping不通本机。别的主机ping不通本机是因为本机的防火墙关闭了ICMP回显功能,只要把这回......
  • mysql数据库-2
    目录字符编码与配置文件存储引擎创建表的完整语法字段类型之整型字段类型之浮点型字段类型之字符类型数字的含义字段类型之枚举与集合字段类型之日期类型字段约束条件字符......
  • 【2022.8.15】MySQL数据库(2)
    今日内容概要字符编码与配置文件数据库存储引擎创建表的完整语法MySQL字段类型MySQL字段约束今日内容详细字符编码与配置文件如何查看数据库基本信息(用户......
  • MySQL字段类型
    今日内容字符编码与配置文件查看数据库基本信息(用户字符编码) \swindows下MySQL默认的配置文件(苹果本不一样) my-default.int 拷贝上述文件并且重命名为my.ini由......
  • MySQL字段类型、字符编码与配置文件
    目录字符编码与配置文件存储引擎创建表的完整语法字段类型之整形字段类型之浮点型字段类型之字符类型字段后面的含义字段类型之枚举和集合字段类型之日期类型字段约束条件......
  • 2022-08-15 第六小组 张宁杰 Mysql数据库(1)
    Mysql数据库数据库数据库【按照数据结构来组织、存储和管理数据的仓库】。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据对于公司......
  • 【MySQL】第2回 字符编码和字段类型
    目录1.字符编码与配置文件1.1\S1.2my.ini2.数据库存储引擎2.1定义2.2需要掌握的存储引擎2.3不同存储引擎之间底层文件的区别3.创建表的完整语法4.MySQL字段类型4.......
  • 2022-8-15MySQL的学习
    MySQL数据库数据库数据库【按照数据结构来组织来存储和管理数据的仓库】。是一个长期存储在计算机内的有组织的可共享的,统一管理的大量数据的集合。数据对于公司来......
  • Mysql 数据备份与恢复
    数据备份使用工具导出工具导出文件包含创建数据库和其他sql语句导出内容dbname.sql/*SQLyogUltimatev12.08(32bit)MySQL-5.7.27:Database-dbname******......
  • go 通过sql操作mysql
    GoLang学习更方便,一文在手,面试我有GoLang面试|GoLang面试|GoLang面试go通过sql操作mysql亲测、2022/08/1520:53北京朝阳@目录前言go代码sql汇总-增删改查......