記一次MySQL服務(wù)啟動(dòng)失敗的原因及解決辦法

一、原因排查

昨天剛在虛擬機(jī)(CentOS7.5)中安裝好了MySQL5.7,然而今天啟動(dòng)的時(shí)候卻無法啟動(dòng)。下面來看看究竟發(fā)生了什么。
首先,啟動(dòng)之前我查看了一下MySQL服務(wù)當(dāng)前的狀態(tài),發(fā)現(xiàn)并沒有開機(jī)自啟,我就有點(diǎn)好奇了,因?yàn)槲也]有把默認(rèn)的開機(jī)自啟關(guān)閉掉。

1-1.png

沒有自啟那咱就自己手動(dòng)啟動(dòng)吧,然后我輸入了systemctl start mysqld,但是結(jié)果并未如我所愿,沒錯(cuò),mysql服務(wù)啟動(dòng)失敗了。
1-2.png

那就按照終端的提示來吧,讓咱輸入journalctl -xe來查看詳情,沒別的辦法,只能老老實(shí)實(shí)照做了。一張圖還放不下,還得放兩張:
1-3-1.png

1-3-2.png

這兩張圖的意思是什么呢?就是說,你要啟動(dòng),然后你啟動(dòng)失敗,再給你啟動(dòng),又失敗。。。沒辦法了,我其他的也看不懂。這個(gè)時(shí)候,就需要去看一下之前的配置文件了,我記得我的配置文件是在/etc/my.cnf文件,之前有在MySQL安裝的文章中留有截圖,那—就是下面這一張:這一次不要看紅框,要看紫框,看名字這個(gè)應(yīng)該就是mysql記錄錯(cuò)誤的日志。
MySQL安裝文章中的圖3-1.png

那就查看一下吧,執(zhí)行cat /var/log/mysqld.log,這次查到的結(jié)果,截圖截了四張。。。就只放第一張和最后一張吧,因?yàn)槠渌麅蓮垱]什么用(其實(shí)第一張也沒什么用)。
1-4-1.png

1-4-4.png

這下就定位到錯(cuò)誤原因了:Can't start server: can't check PID filepath: No such file or directory,什么意思呢?借助百度翻譯,說是:無法啟動(dòng)服務(wù)器:無法檢查PID文件路徑:沒有這樣的文件或目錄。那么這個(gè)pid是什么?(進(jìn)程標(biāo)識(shí)符process identifier,又略稱為進(jìn)程 ID,或者 PID,是大多數(shù)操作系統(tǒng)的內(nèi)核用于唯一標(biāo)識(shí)進(jìn)程的一個(gè)數(shù)值。這一數(shù)值可以作為許多函數(shù)調(diào)用的參數(shù),以使調(diào)整進(jìn)程優(yōu)先級(jí)、殺死進(jìn)程之類的進(jìn)程控制行為成為可能。)等會(huì),怎么這么眼熟?這不是配置文件中有配置嗎,綠色框里不就是嗎,怎么會(huì)沒有呢?
pid.png

那就查看一下,cd /var/run/mysqld,執(zhí)行這個(gè)命令之后,果然,是沒有這個(gè)目錄的,更別提mysqld.pid了。
1-5.png

為什么會(huì)出現(xiàn)這種情況呢?首先造成這個(gè)問題的原因是因?yàn)閙ysql本身的問題,放在run這種內(nèi)存文件夾之內(nèi)導(dǎo)致的。/var/run/目錄下創(chuàng)建的文件夾是在內(nèi)存中,故每次重啟后內(nèi)存被清空,導(dǎo)致/var/run/mysqld 也被清除,從而導(dǎo)致無法啟動(dòng)mysql。

二、解決辦法(以下1~4步驟可以不看,因?yàn)樾胁煌?

知道了啟動(dòng)失敗的原因,下面就是如何解決了。需要更改兩處文件/etc/my.cnf和/etc/init.d/mysqld:

  1. 首先執(zhí)行命令:vim /etc/my.cnf,按照?qǐng)D片指示修改文件:

    2-1.png

  2. 執(zhí)行命令vim /etc/init.d/mysqld,按照?qǐng)D片指示修改文件:

    2-2.png

  3. 修改后,保存并退出。
    這之后,還需要確保 /var/lib目錄中有mysqld目錄,沒有的話,需要手動(dòng)創(chuàng)建。
    cd /var/lib
    ls查看是否有mysqld目錄
    mkdir mysqld沒有的話就執(zhí)行這一句
    chown -R mysql /var/lib/mysqld目錄所有者屬性改為mysql
    chgrp -R mysql /var/lib/mysqld目錄組屬性改為mysql

  4. 然后依次執(zhí)行下面的命令:
    systemctl daemon-reload,用來重構(gòu)進(jìn)程
    service mysqld start,用來啟動(dòng)Mysql。嘗試啟動(dòng),一直停留在staring狀態(tài),這是為什么呢?是不是這種解決方法不行呢?郁悶啊,有時(shí)間接著改!
    chkconfig mysqld on,用來隨系統(tǒng)啟動(dòng)

  5. 查了很多貼子,有說rpm安裝的默認(rèn)是在/var/run/mysqld目錄下生成的,即使更改了也不生效。不知道為什么。此處存疑。也有說是MySQL臨時(shí)文件的問題:MySQL使用環(huán)境變量TMPDIR的值作為保存臨時(shí)文件的目錄的路徑名。如果未設(shè)置TMPDIR,MySQL將 使用系統(tǒng)的默認(rèn)值,通常為/tmp、/var/tmp或/usr/tmp。這里是不是就是使用了/var/run?
    因?yàn)橹白隽撕芏嗖怀晒Φ牟僮?,?dǎo)致我的mysql登錄密碼已經(jīng)失效,我先將/var/lib/mysql下的內(nèi)容清空,然后重新初始化了一下mysql。
    那么接著改吧,既然更改目錄不行,那就改回來(如果沒有做1~4中的步驟,也要按此操作,因?yàn)樵趓un目錄下是沒有mysqld目錄的),然后再在/var/run/目錄下創(chuàng)建mysqld目錄吧。
    mkdir -p /var/run/mysqld創(chuàng)建mysqld目錄
    chown mysql.mysql /var/run/mysqld修改目錄權(quán)限
    touch /var/run/mysqld/mysqld.pid創(chuàng)建mysqld.pid文件
    chown mysql.mysql /var/run/mysqld/mysqld.pid修改文件權(quán)限
    service mysqld start終于可以成功啟動(dòng)了?。?!
    接下來登錄一下,mysql -root -p,然后找到初始化后生成的臨時(shí)密碼進(jìn)行登錄就可以了。
    接下來,要做的是更改密碼,修改默認(rèn)字符集等相關(guān)配置就可以了。
    然后重啟虛擬機(jī),看是否/var/run/mysqld被刪除了。很遺憾,被刪除了。每次啟動(dòng)都需要手動(dòng)創(chuàng)建這個(gè)目錄和里面的文件。暫時(shí)還未找到其他方法(網(wǎng)上貼子有執(zhí)行過1~4步驟后成功的,我的不行,不知道為什么,就很郁悶,有時(shí)間再研究這個(gè)問題吧),以后找到了再來更。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容