MySQL啟動失敗的原因有哪些

MySQL 啟動失敗的原因有哪些,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元方山做網(wǎng)站,已為上家服務(wù),為方山各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

一、無法訪問系統(tǒng)資源

MySQL 不能訪問啟動需要的資源是造成而 MySQL 無法啟動的一個常見原因,如:文件,端口等。由于 linux 中用于啟動 mysqld 進(jìn)程的  mysql 用戶通常是不能登陸的,可以使用類似下面的命令檢查文件的訪問權(quán)限。

sudo -u mysql touch /var/lib/mysql/b

找出問題后,修改對應(yīng)文件或目錄的權(quán)限或?qū)僦骱笸ǔ?梢越鉀Q問題。但有時 mysql  用戶有訪問文件和目錄的權(quán)限,但仍然會被拒絕訪問,例如下面這個例子:

mysql> system sudo -u mysql touch  /home/mysql/data/a mysql> create table t1 (     id int primary key,n varchar(10     ) data directory ERROR 1030 (HY000): Got error 168 from storage engine

測試說明 mysql 用戶有這個目錄的訪問權(quán)限,但創(chuàng)建文件還是失敗,這種情況讓很多人困惑,這個時候通常是 mysqld 進(jìn)程的訪問被 linux 的  selinux 或 apparmor 給阻止了,大家可以看到創(chuàng)建的表不是在 mysql 的默認(rèn)目錄下面,因此 selinux 或 apparmor 的  policy 里面沒有包含這個目錄的訪問權(quán)限,此時只要對應(yīng)的修改 policy 就行了,當(dāng)然把 selinux 或 apparmor 停了也行。

有時雖然對系統(tǒng)資源有訪問的權(quán)限,但系統(tǒng)資源已經(jīng)被占用:

mysqld --no-defaults --console --user mysql 2020-11-03T03:36:07.519419Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 21171 2020-11-03T03:36:07.740347Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11

這個故障產(chǎn)生的原因是另外一個 mysqld 進(jìn)程已經(jīng)啟動并占用了對應(yīng)的文件。

二、參數(shù)設(shè)置錯誤

參數(shù)設(shè)置錯誤造成 MySQL 無法啟動的原因也非常常見,此時先要檢查 MySQL 啟動時會調(diào)用的參數(shù),下面的命令可以查詢 MySQL  啟動時調(diào)用參數(shù)文件的順序:

$ mysqld --verbose --help | grep "Default options "  -A 1 Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

知道了 MySQL 參數(shù)文件的調(diào)用順序,我們就可以檢查對應(yīng)的參數(shù)文件,找出其中的錯誤,如果覺得參數(shù)文件的可讀性不強(qiáng),可以使用下面的命令顯示 mysqld  程序?qū)⒁{(diào)用的參數(shù):

$ mysqld --print-defaults /usr/sbin/mysqld would have been started with the following arguments: ......

注意這個命令顯示完參數(shù)后就退出,不會真正運(yùn)行 mysqld。這個命令和 my_print_defaults mysqld  完全是等價的,只不過后者的顯示方式是一行一個參數(shù)。

然后開始對可疑的參數(shù)進(jìn)行調(diào)試,我個人喜歡加的參數(shù)和順序如下:

1. 在 mysqld 后加上第一個參數(shù) --no-defaults ,這個參數(shù)的作用是通知 mysqld 在啟動的時候不要讀任何參數(shù)文件;

2. 第二個參數(shù)是  --console,這個參數(shù)會把錯誤信息輸出到屏幕上,這個參數(shù)帶來的一個弊端是所有的信息都輸出到屏幕上,讓屏幕顯得比較亂,但對于我們調(diào)試卻是很方便的;

3. 第三個參數(shù)是 --log-error-verbosity=3,這個參數(shù)會顯示詳細(xì)的日志;

4. 然后再在后面加上有把握的參數(shù),可以一次只加一個參數(shù),然后啟動 mysqld,采用排除法逐步找出錯誤的參數(shù)。

看這個例子:

mysqld --no-defaults --console  --log-error-verbosity=3 --user mysql --gtid_mode=on 2020-11-03T07:14:20.384223Z 0 [Note] [MY-010949] [Server] Basedir set to /usr/. 2020-11-03T07:14:20.384254Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.19) starting as process 22617 2020-11-03T07:14:20.400221Z 0 [Note] [MY-012366] [InnoDB] Using Linux native AIO …… 2020-11-03T07:14:21.632851Z 0 [ERROR] [MY-010912] [Server] GTID_MODE = ON requires ENFORCE_GTID_CONSISTENCY = ON. 2020-11-03T07:14:21.634183Z 0 [ERROR] [MY-010119] [Server] Aborting …… 2020-11-03T07:14:23.026551Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.19)  MySQL Community Server - GPL. root@scutech:~#

看這個例子,我們很容易知道是需要我們同時設(shè)置參數(shù) GTID_MODE 和 ENFORCE_GTID_CONSISTENCY 同時為 on 才行。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

當(dāng)前標(biāo)題:MySQL啟動失敗的原因有哪些
鏈接分享:http://muchs.cn/article46/jepdhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、企業(yè)建站、定制開發(fā)、App開發(fā)、電子商務(wù)域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)