記一次Mysql數據庫Kill完之后啟動不起來的解決方案


在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文件復制替換到現有數據庫中,

這樣就恢復成功了。

如果以上內容對你有幫助,可以點個推薦哦,謝謝

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM