【轉】mysql無法啟動,mysql啟動異常


本文介紹了在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”

分析

  1. Linux實例的MySQL無法啟動,報如下錯誤:
  2. 查看MySQL錯誤日志發現如下錯誤(提示 MySQL 庫的 host 表無法打開)。
  3. 查看/etc/my.cnf配置文件。
  4. 到MySQL數據庫所在目錄查看表是否存在。
  5. 發現MySQL庫的host表是存在的,那為什么會提示不存在呢?
  6. 問題應該出在/etc/my.cnf文件上,從第一個截圖也可以看到警告信息(/etc/my.cnf被忽視)
  7. 查看文件權限。
  8. 原來文件權限被設置成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日志無法去讀,一般由於磁盤空間滿,或者權限不正確導致。

 

解決辦法

  1. 執行如下命令查詢磁盤空間。
     
    df -h
  2. 查看磁盤空間沒有滿,則需要ls命令檢查文件權限。
  3. 執行如下命令,修改文件權限。
     
    chmod 660 mysql-bin.000001chown mysql.mysql mysql-bin.000001
  4. 修改完成,確認正常啟動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文件。

 

解決方法

  1. 使用systemctl status mysqld.servicejournalctl -xe查看服務啟動失敗的原因。
  2. 如果mysqld目錄終端看一下是否存在,如果不存在,執行如下命令,手動創建。
     
    mkdir -p /var/run/mysqld/
  3. 再次嘗試啟動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]
  4. 查看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
  5. 由於權限不正確,/var/run/mysqld/的屬主和屬組還是root,MySQL並不能在其中創建文件后修改該目錄的屬主和屬組。
  6. 執行如下命令,修改mysqld目錄屬性。
     
    chown mysql.mysql /var/run/mysqld/
  7. 執行如下命令,重啟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)”。

 

解決辦法

  1. 使用命令ll -d /tmp命令檢查目錄權限。
  2. 使用chmod 1777 /tmp設置為正確權限。
  3. 重啟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這個文件了。

 

解決辦法

  1. 需要將這個文件復制到/etc/init.d/目錄下,改名為mysqld,並且賦予這個文件可執行權限。
  2. 最后通過命令chkconfig —add mysqld添加開機自動啟動服務。
  3. 使用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_sizekey_buffer_size的大小設置,適當的調大內存分配,一般調整為系統內存的一半。

  1. 先使用free -m查看下系統內存大小,查看是1G內存。
  2. 通過vi /etc/my.cnf,調整innodb_buffer_pool_sizekey_buffer_size各為500M。
    注意: my.cnf以實際配置文件路徑為准。
  3. 重啟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啟動報錯,錯誤日志如下圖所示。

 

問題原因

提示的異常為文件屬性權限異常導致。

 

解決方法

  1. 查看MySQL服務下的data目錄,確認mysql-bin.index的權限是否正常。
  2. 正常情況下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進行鏈接。外部主機由於沒有監聽端口,將無法連接。

 

解決方法

  1. 查看MySQL配置文件,確認端口當前MySQL端口號。
  2. 通過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無權限導致。

 

解決辦法

  1. 查看權限,確認MySQL服務沒有訪問權限。系統顯示類似如下。
  2. 調整為MySQL服務可以訪問的權限,比如777,或者是調整屬帳號為mysql,完成后正常重啟動MySQL。

 

磁盤空間滿導致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日志文件占用過大磁盤空間,磁盤空間不足導致啟動報錯。

 

解決辦法

  1. 執行如下命令,查看當前磁盤使用情況。
     
    df -h 
    系統顯示類似如下。
  2. 執行如下命令,查看當前所有磁盤空間中大於100M的文件。
     
    find / -size +100M
    系統顯示類似如下。
  3. 確認MySQL日志占用過大磁盤空間,且該日志文件無特殊需求時,直接刪除即可。

 

進程殘留導致MySQL無法啟動

問題描述

MySQL啟動失敗,錯誤提示“Starting MySQL. ERROR! Manager of pid-file quit without updating file.”  。

 

問題原因

使用ps -A | grep mysqld命令 ,發現mysqldmysqld_safe進程殘留,進程ID分別是9941221

提示:進程ID在不同服務器環境中可能不同,請根據實際情況為准。

 

解決辦法

通過kill命令,結束兩個進程,重啟MySQL,並確認成功啟動。

 

MySQL服務自動停止

問題描述

服務器上安裝的MySQL,會出現自動停止的情況。

 

問題原因

出現這種現象,通常是服務器的內存不足導致的。

 

解決辦法

    1. 執行如下命令,查看服務器的系統日志/var/log/messages文件,分析服務器日志來分析。
       
      tail /var/log/messages
      系統顯示類似如下。
      注:看下在MySQL自動停止的時間段內,有什么異常的日志信息,如果日志有提示“Out of memory”就可以判定,是服務器的內存使用不足,導致系統自動殺死的MySQL的進程。
    2. 最后可以通過升級服務器的內存可以解決。


免責聲明!

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



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