在Mysql运行的时候,有时候会stop不了,这时候我们就会想直接把他的进程kill掉。
但是,有时候kill完了之后,在去start它就会直接抛异常了。。。
ERROR! The server quit without updating PID file /usr/local/mysql/mysql5/data/VM_0_9_centos.pid
看到这个异常,别慌,我们先把Mysql下面自己的数据库的文件夹备份出来,以及mysql的系统库mysql里面的文件也备份出来,
还有data目录下的ibdata1、 ib_logfile0和ib_logfile1文件也要备份一下(这里是表结构以及数据的东西),
接着,我们把mysql的data目录(也就是存放数据库文件的目录)删掉,然后进行mysql的初始化
./mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
初始化完了之后,再把权限给回去
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
这时候,我们启动mysql的话,就会发现,没有密码怎么进去哦。。。。
然后,我们来修改一下mysql的密码吧
编辑my.cnf允许空密码登录
[root@7Core ~]# vi /etc/my.cnf
#在[mysqld]下加入一行
skip-grant-tables=1
重新启动Mysql服务
[root@7Core ~]# systemctl restart mysqld.service
使用Root登录数据库、使用mysql数据库、修改root密码、退出数据库
[root@7Core ~]# mysql -u root
mysql> use mysql;
mysql> update user set authentication_string = password('新密码'),password_last_changed=now() where user='root';
mysql> exit;
再次打开my.cnf,将skip-grant-tables=1删掉,保存退出
[root@7Core ~]# vi /etc/my.cnf
#删除skip-grant-tables=1
重启Mysql服务
[root@7Core ~]# systemctl restart mysqld.service
这时候我们就可以用账号密码登入了,但是第一次登入的时候,需要去修改一下密码,不然不会让你进行其他操作的
mysql -uroot -p
-- 输入密码登入
-- 然后修改密码
alter user 'root'@'localhost' identified by '新密码';
这时候远程登入数据库应该是会报1130错误的,我们需要修改一下host
use mysql;
update user set host = '%' where user ='root';
这时候就可以去恢复一下数据库的文件了
把你备份的data目录下面要恢复的数据库名对应的文件夹复制到新的datadir目录下面去,数据库的表就恢复了。、
但是这时候,存储过程和函数还是没有的,需要将备份的mysql系统数据库下面的名字叫proc的.frm和.MYD还有.MYI文件复制到datadir文件夹下面去,覆盖掉现有的文件,
此时,表结构和存储过程都已经恢复了,但是打开mysql的表还是会提示表不存在,这时候,我们在把之前备份的data文件夹里面的
ibdata1、 ib_logfile0和ib_logfile1文件复制替换到现有数据库中,
这样就恢复成功了。
如果以上内容对你有帮助,可以点个推荐哦,谢谢
|