mysql啓動失敗排查

修改mysql配置文件之後,使用service mysqld restart 重啓,發現停止成功但是啓動失敗了。

Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

系統提示通過 systemctl status mysqld.service  或者 journalctl -xe 命令來查看詳情。我們一個一個來分析。

 

1、執行 systemctl status mysqld.service

[root@lee ~]# systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: deactivating (final-sigterm) (Result: exit-code) since Wed 2019-05-15 08:54:07 CST; 50s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 32685 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=1/FAILURE)
  Process: 32668 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 30830 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/mysqld.service
           └─32689 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

May 15 08:54:57 lee systemd[1]: mysqld.service holdoff time over, scheduling restart.
May 15 08:54:57 lee systemd[1]: Starting MySQL Server...
May 15 08:54:57 lee systemd[1]: mysqld.service: control process exited, code=exited status=1

通過上面標紅的錯誤信息我們可以看到,mysqld主進程沒有啓動起來,其他就沒有什麼詳細信息了。我們接着往下看。

 

2、執行 journalctl -xe 

May 15 09:03:17 lee systemd[1]: Unit mysqld.service entered failed state.
May 15 09:03:17 lee systemd[1]: mysqld.service failed.
May 15 09:03:17 lee systemd[1]: mysqld.service holdoff time over, scheduling restart.
May 15 09:03:17 lee systemd[1]: Starting MySQL Server...
-- Subject: Unit mysqld.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysqld.service has begun starting up.
May 15 09:03:17 lee mysqld[10921]: Initialization of mysqld failed: 0
May 15 09:03:17 lee systemd[1]: mysqld.service: control process exited, code=exited status=1
May 15 09:03:19 lee systemd[1]: Failed to start MySQL Server.

-- Subject: Unit mysqld.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mysqld.service has failed.
-- 
-- The result is failed.

沒啥有用的信息,就告訴我們啓動失敗了。

 

3、現在我們就只知道主進程執行不成功,其他信息一無所知,這可咋整。

作爲一個程序員出了問題自然是想到看日誌來查找原因,我們來看看mysql的啓動日誌。首先看下my.cnf中日誌的位置,log-error=/var/log/mysqld.log,我的日誌是存在這了,打開日誌看個究竟。

最後面能看到這麼一大坨的東西,看下日誌時間相差了8小時,這是因爲我沒有去配置時區,當然這個不是重點。

2019-05-15T01:08:24.682793Z 0 [Note] Shutting down plugin 'INNODB_CMP_PER_INDEX'
2019-05-15T01:08:24.682795Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM_RESET'
2019-05-15T01:08:24.682797Z 0 [Note] Shutting down plugin 'INNODB_CMPMEM'
2019-05-15T01:08:24.682799Z 0 [Note] Shutting down plugin 'INNODB_CMP_RESET'
2019-05-15T01:08:24.682800Z 0 [Note] Shutting down plugin 'INNODB_CMP'
2019-05-15T01:08:24.682802Z 0 [Note] Shutting down plugin 'INNODB_LOCK_WAITS'
2019-05-15T01:08:24.682804Z 0 [Note] Shutting down plugin 'INNODB_LOCKS'
2019-05-15T01:08:24.682806Z 0 [Note] Shutting down plugin 'INNODB_TRX'
2019-05-15T01:08:24.682807Z 0 [Note] Shutting down plugin 'InnoDB'
2019-05-15T01:08:24.684767Z 0 [Note] InnoDB: FTS optimize thread exiting.
2019-05-15T01:08:24.684867Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2019-05-15T01:08:24.684972Z 0 [Note] InnoDB: Buffer pool(s) load completed at 190515  9:08:24
2019-05-15T01:08:24.685009Z 0 [Note] InnoDB: Starting shutdown...
2019-05-15T01:08:24.785342Z 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
2019-05-15T01:08:24.785563Z 0 [Note] InnoDB: Buffer pool(s) dump completed at 190515  9:08:24
裏面也沒啥關鍵信息,這麼多看起來賊煩,我們來過濾下。

執行   tail -n500 /var/log/mysqld.log|grep -E 'Warning|ERROR'

2019-05-15T01:12:38.934502Z 0 [ERROR] unknown variable 'binlog_fromat=mixed'
2019-05-15T01:12:38.934522Z 0 [ERROR] Aborting
2019-05-15T01:12:40.984590Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-05-15T01:12:41.188849Z 0 [ERROR] unknown variable 'binlog_fromat=mixed'
2019-05-15T01:12:41.188873Z 0 [ERROR] Aborting
2019-05-15T01:12:43.228937Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-05-15T01:12:43.431933Z 0 [ERROR] unknown variable 'binlog_fromat=mixed'
2019-05-15T01:12:43.431951Z 0 [ERROR] Aborting
到這裏就很明顯能看出問題了,提示未知參數,我們的英文單詞拼錯了。你問我怎麼會敲錯的,因爲是信了網上親測可用的這些帖子的邪了。這要是可用我把小牛子都給你揪下來。

4、總結

對於mysql啓動報錯我們可以通過如下的步驟來排查。

①:systemctl status mysqld.service 命令,通過這個我們能很快定位到出錯的進程。

②:journalctl -xe 命令,作爲上一步的補充能夠進一步佐證我們的判斷。

③:查看mysql的日誌,這個是最重要的。因爲絕大部分成熟的產品一定會考慮用戶的使用,mysql從載入內存開始,後續的操作都會記錄到日誌當中。所以我們在使用mysql時出現類似問題,大概率都能從日誌文件中找到問題,加以分析就能解決了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章