こんにちは、学生アルバイトのohkiです。

皆さんはノートパソコンを持っていますか?windowsですか?Macですか?私はMacを使っています。

ちなみに弊社では、Macユーザーが多いです。Macユーザーの特権はsequel proを使ってmysqlを操作できることではないでしょうか。このGUIはとても使いやすく、これを使うためにMacにしてもいいと言っても過言ではないかもしれません。

しかし、Macでmysqlを操作する上では気をつけないといけないことがあります。皆さんはこんな経験がないでしょうか?まず、会社のwifiを使ってmysqlを起動します。

$sudo mysql.server start
=>Starting MySQL
. SUCCESS! 

そして、会社から帰るときに、電車の中でデザリング機能を使ってmysqlを終了させます。

$sudo mysql.server stop
=>ERROR! MySQL server PID file could not be found!

すると、上記のようなエラーが起きてしまいます。でもPIDファイルはあるのに…

この原因として、Macの場合ですが、ホスト名が明示的に設定されていない場合、ネットワークが変わるとホスト名も変わってしまうということが考えられます。ホスト名が変わってしまうと、PIDファイル名も変わってしまうのです。

ホスト名が勝手に変更されてしまう原因としては、Macで利用されている「Bonjour」というLAN内の端末検知の仕組みが関わっているようで、Bonjourはネットワーク上に同一のホスト名がすでに存在すると、自動的に自分のホスト名の末尾に番号をつけてホスト名を更新し、ホスト名の重複を回避するような仕様があるようです。(macbookpro.localというホスト名が、macbookpro-2.localのように変更されてしまう。)(参考)

PIDファイル名はホスト名ベースの名称が自動付与されますので、ホスト名が変わったことで探しに行くPIDファイル名の名称が更新され、一致するPIDが無い(MySQL server PID file could not be found!)というエラー発生に至ったと思われます。

PIDファイルとは

PIDとはプロセス識別子と呼ばれるもので、ある時点で存在するプロセスを一意に識別するために用いられます。優先順位を調整したり、終了させたり等、プロセスを操作する様々な関数の引数として使われます。そして、このPIDファイル名にはホスト名が使われています。

ホスト名

先ほどにも述べたように、Macでは繋げているネットワークが変わると、ホスト名も変わってしまいます。Macのホスト名は ComputerName,HostName,LocalHostName があります。これらが設定されていないと、自動でホスト名を割り当てられてしまう可能性があります。つまり、あるネットワークでmysqlサーバを起動し、別のネットワークでサーバを終了させようとすると、起動した時のPIDファイルが必要になるため、エラーが起きてしまいます。 ホスト名は、
$sudo scutil --get ComputerName
$sudo scutil --get HostName
$sudo scutil --get LocalHostName
でそれぞれ確認でき、
$sudo scutil --set ComputerName rooter
$sudo scutil --set HostName rooter
$sudo scutil --set LocalHostName rooter
で設定することができます。 それでは、実際にホスト名を設定してからmysqlを起動してみましょう!今回は、HostNameだけが設定されていない場合を想定しています。 まずHostNameを設定します。
$sudo scutil --get HostName
=>HostName: not set

$sudo scutil --set HostName rooter

$sudo scutil --get HostName
=>rooter
これで、3つのホスト名が設定されました。mysqlを起動してみましょう。
$sudo mysql.server start
=>Starting MySQL
. SUCCESS! 
そして次に、起動した時と違うネットワークに接続して,mysqlを終了させると、
$sudo mysql.server stop
=>Shutting down MySQL
. SUCCESS! 
このように、無事終了できました。

まとめ

以前mysqlを使い始めたばかりの時にPIDファイルによるエラーによって苦戦したことがあり、mysqlをインストールし直したり、エラーがでるたびにパソコンを再起動したりしていましたが、これでMacでも快適にmysqlを使えそうですね。ぜひ参考にしてみてください。