记一次Mysql无法启动的问题
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
缘起
节省成本,测试环境DB使用的一台个人电脑,今天办公室装修,停电了。电力恢复以后发现mysql无法启动,报错如下
./mysql.server start
但是如果用restart命令又是报错另外一个
./mysql.server restart
一时间搞不懂什么原因,跟剧下面那个提示又提示什么pid文件不存在,尝试过在data文件下新建一个pid文件写入一个数字也不行。
解决方案
找问题的过程就不说了,说自己的解决方案吧
先看日志文件
vi /etc/my.cnf
tail -200f /usr/local/mysql/error.log
说的是这个文件不能写,看了下这个文件不知道为什么没权限?我这个mysql都用很久了,没权限早该没权限啊,不管了,给他分一个权限。这里要写*
,不能只给那一个文件的权限
cd /usr/local/mysql/mysqldb
chmod -R 777 *
继续启动,又报错
通过这篇文章看的出来原因是索引损坏了,如何修复呢?
修改mysql 配置文件 /etc/my.cnf
[mysqld]
innodb_force_recovery=6
- 1 (SRV_FORCE_IGNORE_CORRUPT)
使服务器即使检测到损坏的页面也可以运行 。尝试 跳过损坏的索引记录和页,这有助于转储表。 SELECT * FROM tbl_name - 2 (SRV_FORCE_NO_BACKGROUND)
阻止主线程和任何清除线程运行。如果在清除操作期间发生意外退出,则此恢复值将阻止它。 - 3 (SRV_FORCE_NO_TRX_UNDO)
崩溃恢复后 不运行事务 回滚。 - 4 (SRV_FORCE_NO_IBUF_MERGE)
防止插入缓冲区合并操作。如果它们会导致崩溃,请不要这样做。不计算表 统计信息。此值可能会永久损坏数据文件。使用此值后,准备删除并重新创建所有二级索引。设置 InnoDB为只读。 - 5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
启动数据库时 不查看撤消日志: InnoDB即使未完成的事务也视为已提交。此值可能会永久损坏数据文件。设置InnoDB为只读。 - 6 (SRV_FORCE_NO_LOG_REDO)
不进行与恢复有关的重做日志前滚。此值可能会永久损坏数据文件。使数据库页面处于过时状态,这反过来可能会使B树和其他数据库结构遭受更多破坏。设置 InnoDB为只读。
好像是说设置成6有可能丢失数据吧,但是管他呢,我们这个是测试环境,而且我需要尽快的把数据库恢复启动,大家要干活的啊~
但是啊但是
发现设置为6之后,数据库只能读,不能改了。我又尝试改成1,但是改成1以后又无法启动了,跟上面一样,最终没有能够找到很好的解决办法,重新弄了一个库,然后用navcat备份了数据,然后恢复了。
总结
这次Mysql无法启动的原因,应该就是忽然间的断电导致索引文件损坏了。过程就是看日志,然后忽然检查,然后启动。这样就可以查询数据了,然后就备份,然后又重新建数据库恢复。当然可能有更好的办法,但反正我是没找到,也没有那么多时间尝试。教训就是数据库还是不用本地的,买个阿里云的吧,
“这种事你们可以花点钱嘛!花点!哪怕阿里云呢,花不了多少钱,哪怕偷偷摸摸的,简直就是土匪,土匪都不如!”
折腾老子一下午,C。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |