【MySQL/MariaDB】サービスが起動しなくなった(Job for mariadb.service failed because the control process exited with error code.)

 久しぶりにMariaDBを起動したらrootのパスワードがわからなくなったので、以下のことをやった(つもりだった)。

----------------------------------------- 
 サービス停止
$ systemctl stop mysqld.service
パスワードを飛ばすため skip-grant-tablesを追加して起動(以下はセーフモードで起動しているが、/etc/my.cnfにskip-grant-tablesを記述してサービス再起動しても良い)
$ mysqld_safe --skip-grant-tables
中断後サービス起動
$ systemctl start mysqld.service
----------------------------------------- 
 すると、
Job for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xe" for details.
と出て起動しない。 メッセージ中にある
$ systemctl status mariadb.service
を実行すると、エラーが出ていたが、多すぎて表示されていないようだったので、/var/log/messages(/var/log/mysqlの人もいる?)の該当時刻の部分を読むと、
[ERROR] mariadbd: Got error 'Could not get an exclusive lock; file is probably in use by another process' when trying to use aria control file '/var/lib/mysql/aria_log_control'
[ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
[Note] InnoDB: Compressed tables use zlib 1.2.11
[Note] InnoDB: Using transactional memory
[Note] InnoDB: Number of pools: 1
[Note] InnoDB: Using crc32 + pclmulqdq instructions
[Note] InnoDB: Using Linux native AIO
[Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728
[Note] InnoDB: Completed initialization of buffer pool
[ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
[Note] InnoDB: Check that you do not already have another mariadbd process using the same InnoDB data or log files.
[ERROR] InnoDB: Plugin initialization aborted with error Generic error
[Note] InnoDB: Starting shutdown...
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[Note] Plugin 'FEEDBACK' is disabled.
[ERROR] Could not open mysql.plugin table: "Unknown storage engine 'Aria'". Some plugins may be not loaded
[ERROR] Failed to initialize plugins.
[ERROR] Aborting
systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: mariadb.service: Failed with result 'exit-code'.
systemd[1]: Failed to start MariaDB xx.xx.xx database server.
1行目を見ると、logをコントロールする/var/lib/mysql/aria_log_controlを実行しようとしたときに他のプロセスがまだ動かしていた様子。
実際、mysqld_safeがまだ動いていたのでpkillで消す。しかしそれだけでは当然のように動かず。

aria_log_controlにアクセスしているプロセスを探すと、
$ lsof '/var/lib/mysql/aria_log_control'
COMMAND   PID  USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
mariadbd 5302 mysql    3uW  REG 182,369857       52 262302 /var/lib/mysql/aria_log_control

$ ps -ef | grep mariadb
mysql       5302    5207  1 11:23 ?        00:02:32 /usr/sbin/mariadbd --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --skip-grant-tables --log-error=xxx.err --pid-file=xxx.pid
というように、5302番が使っているようだったので、
$ sudo kill -SIGTERM 5302
で強制撤去(ただのpkillでは消えなかった)。 その後
$ systemctl start mariadb.service
をすると無事起動した。

コメント

このブログの人気の投稿

旧バージョンのiMovieを入れる方法

TWRP公式サポートされてないAndroid端末でシステムインストールした話

[UTAU] Garagebandで作ったボーカルメロディーをUTAUに読ませる