本文介紹了在Linux實例中,MySQL常見的無法啟動或啟動異常處理方法。
轉自:https://help.aliyun.com/knowledge_detail/41106.html#Xcfnz
【1212】
詳細描述
常見問題處理描述,目錄如下。
提示:MySQL錯誤日志通常記錄在
/alidata/log/mysql/error.log
文件下。
MySQL配置文件my.cnf權限問題導致無法啟動,錯誤提示“World-writable config file '/etc/my.cnf' is ignored”
分析
- Linux實例的MySQL無法啟動,報如下錯誤:
- 查看MySQL錯誤日志發現如下錯誤(提示 MySQL 庫的 host 表無法打開)。
- 查看
/etc/my.cnf
配置文件。 - 到MySQL數據庫所在目錄查看表是否存在。
- 發現MySQL庫的host表是存在的,那為什么會提示不存在呢?
- 問題應該出在
/etc/my.cnf
文件上,從第一個截圖也可以看到警告信息(/etc/my.cnf
被忽視) - 查看文件權限。
- 原來文件權限被設置成
777
,因安全問題導致被MySQL忽視,所以去查詢默認的數據庫存放路徑,沒有MySQL庫的host表導致啟動失敗。
解決辦法
將/etc/my.cnf
權限修改成644
,然后啟動MySQL即可。
Binlog 丟失導致無法啟動,錯誤日志: File './mysql-bin.000001' not found
問題描述
清理磁盤空間時刪除了全部binlog
日志,導致MySQL無法啟動。
MySQL的errorlog
里面可以看到錯誤信息。
解決辦法
有以下兩種解決方法,步驟如下。
- 編輯
/etc/my.cnf
,找到log-bin=mysql-bin
,在前面加#
將其注釋暫時關閉binlog
,保存修改后啟動MySQL服務。
提示:
my.cnf
配置文件路徑以實際調用路徑為准 - 通過清理Binlog索引文件解決,清理命令如下,完清理后啟動MySQL服務。
echo " " > mysql-bin.index
注:也可以通過vim編輯進行清理。
Binlog無法讀取導致無法啟動,錯誤日志:Failed to open log (file './mysql-bin.000001', errno 13)
問題描述
MySQL 無法啟動報錯“Starting MySQL…The server quit without updating PID file [FAILED]a/server/mysql/data/test.pid).”。並且查看MySQL的錯誤日志會提示“110711 00:00:00 [ERROR] Failed to open log (file './mysql-bin.000001', errno 13)”
問題原因
Binlog日志無法去讀,一般由於磁盤空間滿,或者權限不正確導致。
解決辦法
- 執行如下命令查詢磁盤空間。
df -h
- 查看磁盤空間沒有滿,則需要ls命令檢查文件權限。
- 執行如下命令,修改文件權限。
chmod 660 mysql-bin.000001chown mysql.mysql mysql-bin.000001
- 修改完成,確認正常啟動MySQL。
不能創建PID導致無法啟動,錯誤日志“Can't start server: can't create PID file: No such file or directory”
問題描述
MySQL 啟動報錯信息如下。
Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details、 [FAILED]
問題原因
MySQL服務在啟動的時候,不能創建PID文件。
解決方法
- 使用
systemctl status mysqld.service
和journalctl -xe
查看服務啟動失敗的原因。 - 如果mysqld目錄終端看一下是否存在,如果不存在,執行如下命令,手動創建。
mkdir -p /var/run/mysqld/
- 再次嘗試啟動MySQL服務,報錯如下。
Starting mysqld (via systemctl): Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details. [FAILED]
- 查看MySQL的告警日志類似如下。
2016-01-20T10:28:37.183387Z 0 [ERROR] /usr/sbin/mysqld: Can’t create/write to file ‘/var/run/mysqld/mysqld.pid’ (Errcode: 13 - Permission denied)2016-01-20T10:28:37.183431Z 0 [ERROR] Can’t start server: can’t create PID file: Permission denied160120 18:28:37 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended160120 18:32:06 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
- 由於權限不正確,
/var/run/mysqld/
的屬主和屬組還是root,MySQL並不能在其中創建文件后修改該目錄的屬主和屬組。 - 執行如下命令,修改mysqld目錄屬性。
chown mysql.mysql /var/run/mysqld/
- 執行如下命令,重啟mysqld。
/etc/init.d/mysqld
不能創建臨時文件導致無法啟動,錯誤日志“mysqld: Can't create/write to file '/tmp/ibfguTtC' (Errcode: 13)”
問題描述
MySQL啟動失敗,錯誤日志“mysqld: Can't create/write to file '/tmp/ibfguTtC' (Errcode: 13)”。
解決辦法
- 使用命令
ll -d /tmp
命令檢查目錄權限。 - 使用
chmod 1777 /tmp
設置為正確權限。 - 重啟MySQL。
MySQL 服務無法識別導致無法啟動,錯誤提示:mysqld: unrecognized service
問題描述
執行MySQL啟動命令service mysqld start
時,提示“mysqld: unrecognized service(未識別的服務)”。
問題原因
因為service
命令是通過/etc/init.d
啟動服務目錄來調用的,所以我們需要看一下/etc/init.d
是否存在mysqld這個服務,使用find /etc/init.d/ -name mysqld
命令來查找,發現沒有mysqld這個文件了。
解決辦法
- 需要將這個文件復制到
/etc/init.d/
目錄下,改名為mysqld,並且賦予這個文件可執行權限。 - 最后通過命令
chkconfig —add mysqld
添加開機自動啟動服務。 - 使用
service mysqld start
啟動成功。
MySQL配置了過大的內存導致無法啟動,錯誤提示“InnoDB: Cannot allocate memory for the buffer pool”
問題描述
MySQL啟動時報錯,查看錯誤日志有“[ERROR] InnoDB: Cannot allocate memory for the buffer pool(不能從緩存池中分配給innodb引擎需要的內存)”。
解決辦法
需要調整MySQL配置文件my.cnf
中的innodb_buffer_pool_size
和key_buffer_size
的大小設置,適當的調大內存分配,一般調整為系統內存的一半。
- 先使用
free -m
查看下系統內存大小,查看是1G內存。 - 通過
vi /etc/my.cnf
,調整innodb_buffer_pool_size
和key_buffer_size
各為500M。注意:
my.cnf
以實際配置文件路徑為准。 - 重啟MySQL服務使其生效。】
MySQL啟動參數過多導致無法啟動,錯誤提示“Too many arguments (first extra is 'start')”
問題描述
Linux實例系統安裝MySQL,啟動的方式有多種,如果輸入mysqld start —user=mysql 啟動后,出現報錯:Too many arguments (first extra is 'start')。
問題原因
這是因為啟動MySQL的時候參數過多導致。
解決辦法
通過直接輸入/路徑/mysqld —user=mysql
的方式啟動,如下所示。
MySQL目錄權限問題導致無法啟動,錯誤提示“File './mysql-bin.index' not found (Errcode:13 - Permission denied)”
問題描述
MySQL啟動報錯,錯誤日志如下圖所示。
問題原因
提示的異常為文件屬性權限異常導致。
解決方法
- 查看MySQL服務下的
data
目錄,確認mysql-bin.index
的權限是否正常。 - 正常情況下
data
目錄下文件的屬主和屬組都應該是mysql,如果不是請修改正確的文件屬性權限,並重啟MySQL。
提示:如果對MySQL服務配置文件的屬性不清楚,可以通過對比正常的MySQL主機對比了解。
MySQL未初始化導致無法啟動,錯誤提示“can't open the mysql.plugin table”
問題描述
MySQL服務啟動時錯誤提示如下。
ERROR! MySQL manager or server PID file could not be found!
Starting MySQL. ERROR! Manager of pid-file quit without updating file.
問題原因
查看錯誤日志提示“can't open the mysql.plugin table ,please run mysql_upgrade to create it”。
解決辦法
執行如下命令,指定datadir與basedir進行初始化啟動。
/alidata/server/mysql-5.1.73/scripts/mysql_install_db —user=mysql —datadir=/alidata/server/mysql/data —basedir=/alidata/server/mysql-5.1.73/
注意:以現場實際MySQL安裝路徑為准。
MySQL啟動成功但未監聽端口
問題描述
MySQL啟動成功,使用ps -ef |grep mysql
可以看到進程,也可以在服務器登錄,但是使用netstat -antp| grep 3306
命令可以看到沒有監聽端口。
問題原因
配置文件中使用了skip-networking
選項功能,該選項的作用是不監聽端口,同主機的用戶可以通過sockets進行鏈接。外部主機由於沒有監聽端口,將無法連接。
解決方法
- 查看MySQL配置文件,確認端口當前MySQL端口號。
- 通過vim編輯MySQL配置文件將skip-networking選項注釋掉或刪除,重啟MySQL即可看到端口監聽了。
MySQL服務ibdata1權限問題導致無法啟動,錯誤日志“InnoDB Operating system error number 13 in a file operation”
問題描述
mysql啟動提示update pid失敗提示“Starting MySQL. ERROR! Manager of pid-file quit without updating file.”。同時錯誤日志中記錄“InnoDB Operating system error number 13 in a file operation”,如下圖所示。
問題原因
操作系統訪問文件/usr/local/mysql/var/idata1
無權限導致。
解決辦法
磁盤空間滿導致MySQL無法啟動
問題描述
啟動MySQL報錯提示為“ERROR! MySQL manager or server PID file could not be found! Starting MySQL. ERROR! Manager of pid-file quit without updating file.”。並且查看下MySQL錯誤日志提示如下圖所示。
問題原因
MySQL日志文件占用過大磁盤空間,磁盤空間不足導致啟動報錯。
解決辦法
- 執行如下命令,查看當前磁盤使用情況。
df -h
- 執行如下命令,查看當前所有磁盤空間中大於100M的文件。
find / -size +100M
- 確認MySQL日志占用過大磁盤空間,且該日志文件無特殊需求時,直接刪除即可。
進程殘留導致MySQL無法啟動
問題描述
MySQL啟動失敗,錯誤提示“Starting MySQL. ERROR! Manager of pid-file quit without updating file.” 。
問題原因
使用ps -A | grep mysqld
命令 ,發現mysqld
和mysqld_safe
進程殘留,進程ID分別是994
和1221
。
提示:進程ID在不同服務器環境中可能不同,請根據實際情況為准。
解決辦法
通過kill命令,結束兩個進程,重啟MySQL,並確認成功啟動。
MySQL服務自動停止
問題描述
服務器上安裝的MySQL,會出現自動停止的情況。
問題原因
出現這種現象,通常是服務器的內存不足導致的。