猫も杓子も記事を書く

140文字ではかけないことをかこうと思います。

mysqlが突然起動しなくなる 第二幕

前回、強制終了から立ち上げたらMysqlが起動できなくなったので調べながら解消した話を備忘録代わりにしましたが、

hidamariman.hatenadiary.jp

今回もそんな感じです。

MacOSのセキュリティアップデートをしろと催促が来たので、 仕事が一段落した間隙を縫ってアップデートをかましました。 無事Macも再起動し、さて、作業再開するかと思い、DBサーバを立ち上げようとすると、

$ mysql -uroot -p 

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)

・・・いつものか。ぐらいにしか思っていませんでした。 やれやれ、と思いつつ、

$ mkdir /tmp/mysql.sock
$ sudo touch /tmp/mysql.sock
$ sudo mysql.server restart

Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/[username].local.pid).
 

・・・んん!? 動揺はしる。 未知との遭遇に、人間はかくも弱い。

エラーメッセージで検索すると、対処法が色々出てきました。ほんとに。 しかし、

$ ls -la /usr/local/var/mysql 

-rw-r-----   1 [username]  admin    393842  2  1 13:21 [username].local.err

ログファイルの所有権は自分にちゃんときていたし、 キルするまでもなく、プロセスは既に死んでいる(はずだ)し・・・ むむむ、と思いつつ、いろいろ調べていると、 こういう時にエラーを出力しつつ、安全に起動してくれるコマンドがあるらしい。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.3.2 mysqld_safe — MySQL サーバー起動スクリプト

なるほど、と思い、やってみます。

$ mysqld_safe

160201 12:48:42 mysqld_safe Logging to '/usr/local/var/mysql/[username].local.err'.
160201 12:48:42 mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
rm: /tmp/mysql.sock: is a directory
160201 12:48:44 mysqld_safe mysqld from pid file /usr/local/var/mysql/[username].local.pid ended

・・・なんかよくわからんけど、終わった。 ただ、このmysqld_safeちゃん、さっき作ったsockを消そうとしてますね。 ディレクトリだから消せなかったみたいなので、こちらで消してあげます。 その後試しにリスタート。

$ rm -r /tmp/mysql.sock 
$ mysql.server restart

Shutting down MySQL
.. SUCCESS! 
Starting MySQL
. SUCCESS! 

$ mysql -uroot -p

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25 Homebrew

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

・・・動いた!起動できました。 結局、最初の対処が完全に無駄だったということになります。 ・・・というかこれ、リブートの時にDBちゃんと死んでなかったってことなのかな・・・

原因はわからないままですが(再起動が遠因なのは明白なのだが) ひとまず今後は、困ったときのmysqld_safeということで、覚えておこうと思います。

※本文中に出てくる[username]っていうのはPCのマシンネームです。