CentOS7非正常断电后Mysql57无法启动

昨天突然断电,等电来了之后我去开服务器发现业务系统进不去了,查了一下发现是Mysql起不来,journalctl -xe后报Unable to determine if daemon is running: No such file or directory,搜了好久发现是一个叫做ibdata1的文件损坏了,现在我来整理下解决方法。
步骤如下:
一、备份数据
1
2
cd /var/lib
cp -r mysql /www

mysql中我有两个表,分别叫做abc 123

二、删除mysql底下的所有文件
1
rm -rf /var/lib/mysql/*
三、初始化mysql
1
2
3
4
systemctl start mysql
grep 'temporary password' /var/log/mysqld.log
mysql_secure_installation
接下来会要求你输入密码,把刚才grep的到的密码输进去,然后按提示一步一步做即可。
四、停止mysql并修改my.cnf
1
2
systemctl stop mysqld
vi /etc/my.cnf

在最底部添加这句

1
innodb_force_recovery = 6

五、复制刚才备份好的数据库到/var/lib/mysql中并修改所有者和权限
1
2
3
4
5
6
cd /www/mysql
cp -r abc /var/lib/mysql
cp -r 123 /var/lib/mysql
cp ibdata1 /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
chmod -R 777 /var/lib/mysql
六、启动mysql
1
systemctl start mysqld
这样就能访问数据库了,然后记得把数据库给导出来,因为这东西已经损坏了,再用下去会出事
总结
ibdata1:

INNODB类型数据状态下,ibdata用来储存文件的数据

innodb_force_recovery = 6

innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的

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):不执行前滚的操作。

关注我的公众号吧~戴戴的Linux

文章目录
  1. 1. 昨天突然断电,等电来了之后我去开服务器发现业务系统进不去了,查了一下发现是Mysql起不来,journalctl -xe后报Unable to determine if daemon is running: No such file or directory,搜了好久发现是一个叫做ibdata1的文件损坏了,现在我来整理下解决方法。
    1. 1.1. 步骤如下:
    2. 1.2. 一、备份数据
    3. 1.3. 二、删除mysql底下的所有文件
    4. 1.4. 三、初始化mysql
    5. 1.5. 四、停止mysql并修改my.cnf
    6. 1.6. 五、复制刚才备份好的数据库到/var/lib/mysql中并修改所有者和权限
    7. 1.7. 六、启动mysql
    8. 1.8. 这样就能访问数据库了,然后记得把数据库给导出来,因为这东西已经损坏了,再用下去会出事
  2. 2. 总结
    1. 2.1. ibdata1:
    2. 2.2. innodb_force_recovery = 6


本站总访问量 本文总阅读量