概要
エラーが起きるたびにググりまくるのがいい加減嫌になったのでまとめました。
急いでいる時はDocker公式のMySQLイメージを使えばいいと思います。
(Dockerの公式MySQLイメージの使い方を徹底的に解説するよ)
共通事項
- サーバーの起動コマンドは
mysql.server start
だが、sodo
が必要な場合も多い - クライアントの起動コマンドは
mysql -u {ユーザー名} -p {パスワード} -h {ホスト名}
- 端折って
mysql -uroot
やmysql -uroot -p
とだけ書く場合もままある
- 端折って
- Homebrewでインストールするコマンドは
brew install mysql
、アンインストールするコマンドはbrew uninstall mysql
。サービスとして登録するにはbrew services start mysql
で、サービスを停止するにはbrew services stop mysql
- 現在のHomebrewだとデフォルトのMySQLがVer.8系なので、
brew install mysql@5.7
など意図的に古いものを導入する場合もある(例:Drupal8がVer.5.7を要求) - 設定ファイルは
/usr/local/etc/my.cnf
など - エラーログは
/usr/local/var/mysql/{ユーザー名}.local.err
に保存されているので、tail -f /usr/local/var/mysql/ipridenoSakami.local.err
などとして確認する - なお、
sudo chown -R _mysql:_mysql /usr/local/var/mysql/
はネット情報を見る限り(近頃は)無駄に終わることが多い模様- そもそも「所有者をmysqlにしろ」と「所有者をユーザー名にしろ」といった意見が .err/.pid/mysqlフォルダ/tmpフォルダについてネット上で両方混在する時点でおかしい……
「ERROR! The server quit without updating PID file (/usr/local/var/mysql/{ユーザー名}.local.pid).」
- 直訳すると「PIDファイル(
/usr/local/var/mysql/{ユーザー名}.local.pid
)を更新せずにこのサーバーが終了した」といった意味。mysql.server start
する際に起きがちなエラー - ERROR 2002のと違い、公式マニュアルに対処法が載っていないので地道に原因を探す必要がある
ls -l /usr/local/var/mysql/{ユーザー名}.local.pid
で当該ファイルの所有権を確認できる。ここで見つからない際は、sudo touch /usr/local/var/mysql/{ユーザー名}.local.pid
と作ってしまう対策もある- 余計なMySQLスレッドが悪さをしている場合もあるので、
ps -ef | grep mysql
などとして確認後にkill
する対策もある
「ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)」
- 直訳すると「
/tmp/mysql.sock
ソケットを通じてローカルのMySQLサーバーに接続できませんでした」といった意味。mysql -uroot
等としてMySQLにアクセスしようとすると起きがちなエラー - 末尾が(38)になっている場合もある。「
/tmp/mysql.sock
ソケットファイルが存在するが、MySQLサーバーが起動していない際にmysql
コマンドでアクセスを試みた際に(38)が出る」が通説だが詳細は不明 - リファレンスマニュアルによると、UNIX上のMySQLクライアントは、mysqldサーバーに2つの方法で接続できる
- UNIXソケットファイル(デフォルトは
/tmp/mysql.sock
。サーバー起動時に--socket={ソケットファイルのパス}
とすれば指定可能)を通じて接続 - TCP/IPでポート番号を通じて接続
- UNIXソケットファイル(デフォルトは
- ソケット方式はTCP/IP方式より高速だが、同一コンピュター上にあるサーバー相手にしか使えない。また、Windowsはソケット方式が使えない
- このエラーが出る原因としては、次の2通りが考えられる
- サーバーが実行されていない場合:
- UNIX系なら
ps xa | grep mysqld
で起動しているかを確認する - 起動していない場合は
mysql.server start
で起動する - Windows系の場合、OSが許容するエフェメラルポートの設定を増やす必要がある場合がある。詳しくはリファレンスページの対処法を参照
- ソケット方式 or TCP/IP方式で接続できなかった場合:
- ソケット形式なら、
- ソケットファイルのアクセス権限がクライアントにあるか確認する。無い場合は適切なパーミッションを設定するか、
/tmp/mysql.sock
ではない別の位置にソケットファイルを作成する……とリファレンスにはあるが、ネット情報を見る限りではソケットファイルのパーミッションを弄っても効果がない場合が多い - 例えば
/tmp/mysql.sock
なら/tmp
の所有権をmysql:mysql
に変更すると効くことがある - ソケットファイルが存在しない場合、
sudo touch /tmp/mysql.sock
などとして作成してしまう手もある - また、
mysql.sock
削除後にmysqld_safe
を起動するとmysql.sock
が再作成されて直ることもある - デフォルトで参照するソケットファイルの位置は
mysql_config --socket
とすれば確認できるが、それをmy.cnf
を編集するなどして変更する手もある。なお、my.cnf
は複数存在するのでmysql --help | grep my.cnf
として位置を確認すること - なぜかソケットファイルにロックが設定され、
/tmp/mysql.sock.lock
といったファイルが出来てしまっていることがある。その場合はmysql.sock.lock
ファイルを消す
- ソケットファイルのアクセス権限がクライアントにあるか確認する。無い場合は適切なパーミッションを設定するか、
- TCP/IP形式なら、外部からの接続を遮断していないかを確認する
- サーバー起動時に
--skip-networking
を設定するとTCP/IP方式が使えない - サーバー起動時に
--bind-address=127.0.0.1
を設定するとlocalhost以外接続できない - ファイアウォールがアクセスをブロックしている可能性がある
- そのサーバーがそのマシン上で実行されていない可能性がある
- そのサーバー上のSELinuxによってmysqldプロセスが保護されている場合は無効化する
- サーバー起動時に
- 1つのMySQLサーバーのスレッドが停止した場合、再起動する前に他の
mysqld
スレッドを強制終了する必要がある。ワンライナーで殺す場合は次のようにする
kill `ps -ef | grep mysql | awk '{print $2;}'`
それでも駄目な時は
- 徹底的にアンインストールする処方箋:
- sudo rm -rf /usr/local/var/mysql
- brew uninstall mysql --force
- brew cleanup
- 入念にパスを通す
- brew link mysql@5.7 --force
- 上記2つはこのページを参考にした
参考記事一覧
- mysqlが接続できない時の対処法 | せんべいって美味しいよね
- OSX Lion, Homebrewで入れたmysqlが起動しない夜 - ワインのばか
- Mysqlが突然起動しなくなる - 猫も杓子も記事を書く
- The server quit without updating PID fileというエラーが出て、ローカルmysqlサーバが起動しない - mnlog
- mysqlで The server quit without updating PID fileが出た時 - ゼロからの技術ブログ
- ”Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/**.local.pid)." エラーの対処 - プログラミングの詰まりどころを、懇切丁寧に
- 「Can't connect to local MySQL server through socket」エラーについて
- MySQLが起動しないエラー(The server quit without updating PID file) | EasyRamble
- MySQLがERROR! The server quit without updating PID fileで起動できないときにやったこと - Qiita
- mysqlを起動しようとしたらPIDファイルがnot foundで起動できないのを解決する話 - Qiita
- mysqlが起動しない問題 - Qiita
- mysqlが起動できない(Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)) - Qiita
- The server quit without updating PID file → mysql起動コマンドのsudo忘れでした - Qiita
- mysqlのsocketエラーでrailsアプリが起動できない - Qiita
- mysqlが起動できない - Qiita
- Railsで「Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)」と言われたので(ぐぐりまくって)直した - Qiita
- mysql起動で「The server quit without updating PID file」 - Qiita
- MySQL が 'The server quit without updating PID file 'というエラーを出したときの対処法 - Qiita
- MySQLにログインしようとすると"Can't connect to local MySQL server through socket"と言われた際の対処法 - Qiita
- MySQL起動できなくなった The server quit without updating PID file - Qiita
- MySql server startup error 'The server quit without updating PID file ' - Stack Overflow
- Mac OS X El CapitanでMySQLをクリーンインストールする | 滋賀/京都/大阪でホームページ制作ならYUKiYURi WEB
- 閲覧数 12208
コメントを追加