I .無法訪問系統(tǒng)資源
MySQL無法訪問啟動所需的資源,這是MySQL無法啟動的常見原因,比如文件、端口等。由于用于在linux中啟動mysqld進程的mysql用戶通常無法登錄,您可以使用以下命令來檢查文件訪問權(quán)限。
sudo-u MySQL touch/var/lib/MySQL/b
找出問題后,修改相應(yīng)文件或目錄的權(quán)限或所有權(quán),通??梢越鉀Q問題。但有時mysql用戶可以訪問文件和目錄,但仍然會被拒絕訪問,比如下面的例子:
MySQL > system sudo-u MySQL touch/home/MySQL/data/a
mysql >創(chuàng)建表t1(
id int主鍵,n varchar(10
)數(shù)據(jù)目錄
錯誤1030 (HY000):從存儲引擎獲得錯誤168
它顯示mysql用戶可以訪問這個目錄,但是文件的創(chuàng)建仍然失敗。這種情況讓很多人很困惑。這時候mysqld進程的訪問通常會被linux的selinux或者apparmor封鎖。可以看到創(chuàng)建的表并不在mysql的默認(rèn)目錄下。因此,selinux或apparmor的策略不包含該目錄的訪問權(quán)限。這時候只需要相應(yīng)的修改策略,當(dāng)然停止selinux或者apparmor也是可以的。
雖然有時您可以訪問系統(tǒng)資源,但是系統(tǒng)資源已經(jīng)被占用:
mysqld -無默認(rèn)值-控制臺-用戶mysql
2020-11-03t 03:36:07.519419 z 0[系統(tǒng)][MY-010116][服務(wù)器] /usr/sbin/mysqld (mysqld 8.0.19)作為進程21171開始
2020-11-03t 03:36:07.740347 z 1[錯誤] [MY-012574] [InnoDB]無法鎖定。/ibdata1錯誤:11
失敗的原因是另一個mysqld進程已經(jīng)啟動并占用了相應(yīng)的文件。
第二,參數(shù)設(shè)置錯誤
由于參數(shù)設(shè)置錯誤導(dǎo)致MySQL無法啟動也是很常見的。這時候你要先檢查一下MySQL啟動時會調(diào)用的參數(shù)。以下命令可以查詢MySQL啟動時調(diào)用參數(shù)文件的順序:
$ mysqld - verbose - help | grep "默認(rèn)選項"-A 1
默認(rèn)選項按給定順序從以下文件中讀取:
/etc/my . CNF/etc/MySQL/my . CNF ~/. my . CNF
知道了MySQL參數(shù)文件的調(diào)用順序,我們就可以檢查相應(yīng)的參數(shù)文件,找出錯誤。如果我們覺得參數(shù)文件的可讀性不強,我們可以使用下面的命令來顯示mysqld程序要調(diào)用的參數(shù):
$ mysqld -打印-默認(rèn)值
/usr/sbin/mysqld會以下列參數(shù)啟動:
......
請注意,該命令將在顯示參數(shù)后退出,并且不會實際運行mysqld。這個命令完全等同于my_print_defaults mysqld,只是后者的顯示方式是每行一個參數(shù)。
然后開始調(diào)試可疑參數(shù)。我個人喜歡把參數(shù)和順序補充如下:
1.在mysqld之后添加第一個參數(shù)- no-defaults。該參數(shù)的作用是通知mysqld在啟動時不要讀取任何參數(shù)文件;
2.第二個參數(shù)是- console,它將錯誤信息輸出到屏幕上。這個參數(shù)的一個缺點是所有信息都輸出到屏幕上,讓屏幕看起來很亂,但是對我們調(diào)試來說非常方便;
3.第三個參數(shù)是-log - log-error-verbosity=3 = 3。此參數(shù)將顯示詳細(xì)的日志;
4.然后在后面加上確定的參數(shù)。一次只能添加一個參數(shù),然后啟動mysqld,用排除法逐步找出錯誤的參數(shù)。