记一次mysql重启报–Iinitialization 目录已存在问题处理
今天数据库偶然崩了之后,重启时居然报初始化目录已存在的问题,我又不是新安装数据库, 怎么会报这个呢,最开始找不到原因,没百度不出结果。在长达几个小时折腾后。记录如下方式
- 先确认/etc/my.conf中是否配置了日志目录,log-error=/var/log/mysqld.log,然后去看看里面的日志
- 如果里面出现了mysql.user表不存在等类似的错误。那么就是和我现在的情况一样。
解决办法:
修改my.conf中的配置文件中的datadir,将他换一个新的目录,可以这样:比如之前的是
datadir=/var/lib/mysql
那么可以改为
datadir=/var/lib/mysql2
然后启动mysql,他会在mysqsl2目录里面启动,
这时,将mysql2里面的mysql目录整体复制到/var/lib/mysql中,注意,如果你是root账号登录,需要将你复制后的mysql目录的所属用户改为mysql。命令为
chown mysql:mysql /var/lib/mysql/mysql/*
chown mysql:mysql /var/lib/mysql/mysql
两个都要改,不然会报权限问题。
然后再启动。就可以了。
再记录一个其他问题:
如果在创建表或其他情况下遇到:tablespace is missing for table from school.user
就需要重新建个库eg:school2,在新库里面创建同名表eg:user,然后去datadir指定的目录下找到
school2目录,进去找到user.frm和user.ibd。将这两个替换原shcool库下面的user.frm和user.ibd,
** 然后也要修改文件所属用户为mysql**
然后执行ALTER TABLE tb_user IMPORT TABLESPACE; SHOW WARNINGS;
例如:
/var/lib/mysql/school/user.frm和user.ibd是原来的有问题的。
/var/lib/mysql/school2/user.frm和user.ibd是新的,
就用新的替换旧的即可。
再次注意也要修改文件所属用户为mysql