ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)→(13)→(111)→起動
CentOS7から標準のDBがMariaDBになったが、
MariaDB(MySQL)が起動せず、エラーコードを横断(?)する羽目になった。
結論から先に書くとmariadb-server
が無かった。(昨日まで起動してたので、何かの作業の拍子に ないない してしまったのか?謎)
ただ、ソケット関連のエラーはよく見かけるのでいつかの為に書き残すことにした。
前提条件
環境
CentOS7 MariaDB 5.5
エラー内容
公式リファレンスを読む限り以下の通り
ソケット '%s' (%d) を使用してローカルの MySQL Server に接続できません
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
ソケット /var/lib/mysql/mysql.sock
を使ってローカルのMySQLサーバーに接続できないということだけど・・・
具体的にはどういうこと?
そんな時確認するとよいのが末尾の()内のエラーだ。
これはどうやらOSが返しているエラーのようだ。
エラーコードの内容はperror
コマンドで確認できる。
エラー(2)
は
OS error code 2: No such file or directory
🤨/var/lib/mysql/mysql.sock というファイルを使おうにもそんなファイルはないです
それじゃあソケットファイルを作りましょう。
[vagrant@localhost /]$ sudo touch /var/lib/mysql/mysql.sock [vagrant@localhost /]$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
再度接続してみると末尾の()内の数字が変わった。
OS error code 13: Permission denied
😠/var/lib/mysql/mysql.sock というファイルを開く権限がないです
mysql.sockに権限を付与してみる。
[vagrant@localhost /]$ sudo chmod 777 /var/lib/mysql/mysql.sock [vagrant@localhost /]$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
別のエラー
OS error code 111: Connection refused
😡接続できねえよ(意訳)
Connection refused
が起きるときは
接続対象が起動していない or 存在しない パターン。
おやおや、とステータス確認するとmadiadbがないといわれている。(先に確認しろ)
[vagrant@localhost /]$ sudo systemctl status mariadb Unit mariadb.service could not be found.
mariadb関連で何かないものがあるようなのでインストール済みのパッケージを確認
[vagrant@localhost /]$ yum list installed mariadb* mariadb.x86_64 1:5.5.60-1.el7_5 @updates mariadb-devel.x86_64 1:5.5.60-1.el7_5 @updates mariadb-libs.x86_64 1:5.5.60-1.el7_5 @updates
mariadbを使えるようにするには mariadb
、mariadb-server
、mariadb-devel
がいるはずなのにmariadb-server
が入っていなかったようだ。
(mariadb-libs
は依存性関連でインストールされる)
[vagrant@localhost /]$ sudo yum install mariadb-server . . . . Installed: mariadb-server.x86_64 1:5.5.60-1.el7_5 Complete!
入ったので mariadb起動
[vagrant@localhost /]$ sudo systemctl start mariadb
[vagrant@localhost /]$ mysql -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.60-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
起動した。
まとめ
インターネットという便利なものがあるのでエラーコードで真っ先にググりがちだけど
まずはアプリケーションのステータスを確認しなさい
という初歩も初歩のお約束を身に叩き込まれた経験であった。も~バカバカ👸!!
学びとしては
MySQLのエラーが出たら
- MySQL固有のエラーコードを調べる
- OSのエラーを調べる
この順序さえ踏めばド嵌りすることは少なそう。 こちらの記事には感謝。
参考
- MySQL :: MySQL 5.6 リファレンスマニュアル :: B.4 クライアントのエラーコードおよびメッセージ
- MySQL :: MySQL 8.0 Reference Manual :: B.3 Server Error Codes and Messages
- mysqlソケットエラー解決法 - ウマい話、ちょいくれや。
- MySQLでよく見かけるエラーの発生原因と対策方法 | サービス | プロエンジニア
- MySQLエラーログに出てきたエラーコードのとっかかり | b.l0g.jp
- UNIX系のエラー一覧 - inamuu wiki site
- MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.19.6 オペレーティングシステムのエラーコード
- MySQLエラーログのエラーを診断する方法 - Percona Database Performance Blog