さとうナイトニッポン

やったことのメモとか日々の雑記とか

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を使えるようにするには mariadbmariadb-servermariadb-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

mysql(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のエラーが出たら

  1. MySQL固有のエラーコードを調べる
  2. OSのエラーを調べる

この順序さえ踏めばド嵌りすることは少なそう。 こちらの記事には感謝。

参考