今天手贱突然重启服务器,重启后导致宝塔面板的mysql5.6无法启动,
根据网上教程执行命令:
wget -O sql-repair.sh http://download.bt.cn/install/sql-repair.sh && sh sql-repair.sh
出现如下提示
将上面错误提示发到宝塔面板论坛,大神做出如下回复:
没有必须重启服务器的需求不要重启服务器,轻则启动不了mysql,重则数据库损坏造成数据丢失;
上面图片mysql建议你使用innodb_force_recovery参数恢复启动mysql试试,你可以上网搜一下;
另外,操作前做个服务器快照再操作,避免造成二次影响
然后百度了innodb_force_recovery参数恢复相关内容,具体按如下操作:
①进入/www/server/data 将相应的数据库压缩打包下载进行保存备份(以备不时之需)
②在主配置文件my.cnf中添加
innodb_force_recovery=1
警告
只有在紧急情况下将innodb_force_recovery设为大于0的值,你才能启动InnoDB并转储表。在进行此操作之前,确保你有数据库的备份副本,以备需要重建它。4及以上的值可以永久破坏数据文件。只有在数据库的独立物理副本的成功地测试了设置,才能在生产服务器实例使用4及以上的innodb_force_recovery设置。当强制InnoDB恢复,你应该总是以innodb_force_recovery=1启动,且仅在需要时增加值。
innodb_force_recovery默认为0(没有强制恢复的正常启动)。对于innodb_force_recovery允许的非零值是1至6。较大值包括较小值的功能。例如,为3的值包括所有的值1和2的功能。
如果你能以innodb_force_recovery为3或更低值转储你的表,那么你是比较安全的,只有在损坏的个人页的一些数据会丢失。4或更大的值被认为是危险的,因为数据文件可以被永久地损坏。值6被认为是严重的,数据库页被留在一个陈旧的状态,这反过来又可能带给B-trees和其它数据库结构更多的损坏。
作为一个安全措施,InnoDB 在innodb_force_recovery大于0时阻止INSERT,UPDATE或DELETE操作。对于MySQL5.6.15,将innodb_force_recovery设为4或更高会让InnoDB处于只读模式。
③重启MySQL,
④导出数据脚本
mysqldump -uroot -p123456 test > test.sql
导出SQL脚本。或者用Navicat将所有数据库/表导入到其他服务器的数据库中。
注意:这里的数据一定要备份成功。然后删除原数据库中的数据。
⑤删除ib_logfile0、ib_logfile1、ibdata1
备份MySQL数据目录下的ib_logfile0、ib_logfile1、ibdata1三个文件,然后将这三个文件删除
⑥配置my.cnf
将my.cnf中innodb_force_recovery = 1或2——6几个数字这行配置删除或者配置为innodb_force_recovery = 0,重启MySQL服务
⑦将数据导入MySQL数据库
mysql -uroot -p123456 test < test.sql; 或者用Navicat将备份的数据导入到数据库中。
如果在导入数据过程中发生tablespace不存在的问题,请删除data目录相应database下的文件。
此种方法下要注意的问题:
1、ib_logfile0、ib_logfile1、ibdata1这三个文件一定要先备份后删除;
2、一定要确认原数据导出成功了
3、当数据导出成功后,删除原数据库中的数据时,如果提示不能删除,可在命令行进入MySQL的数据目录,手动删除相关数据库的文件夹或者数据库文件夹下的数据表文件,前提是数据一定导出或备份成功。
以下是走过的弯路:
①直接使用的innodb_force_recovery=6 然后数据库变成只读。导致一个wordpress网站的文章不见了,查数据库,发现是相应表没有了,即使上传了备份文件也无法恢复。没注意是只读模式。
mysql 提示表不存在的解决方法error: 1146: Table doesn‘t exist
经验教训:
①没事千万不要重启服务器,特别是数据很大的网站。
②操作之前一定要先备份网站数据库,以便恢复网站