在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文件復制替換到現有數據庫中,
這樣就恢復成功了。
如果以上內容對你有幫助,可以點個推薦哦,謝謝