プロローグ
環境
- asianux7(※CentOS7.2相当)
- mariaDB10.2.11
- VirtualBox5.1.30
- Vagrant1.9.8
エラーとの遭遇
mariaDBを使おうとしたら、以下のようなエラーに遭遇しました。
[vagrant@asianux7 ~]$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
生還までの道のり
ググる
いろいろ見ましたが、/var/lib/mysql/mysql.sockがないので作るとか、権限を付与するという解決策のものでした。
mysql.sock
一番怪しいmysql.sockを見てみました。
消えているわけでも権限がついていないわけでもありませんでした。
念のため、一旦消してtouchで再作成してみましたが、現象は変わりません。
[vagrant@asianux7 ~]$ ls -l /var/lib/mysql
合計 116796
-rw-rw---- 1 mysql mysql 16384 12月 14 11:54 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 12月 14 11:54 aria_log_control
-rw-rw---- 1 mysql mysql 2682 12月 14 11:54 ib_buffer_pool
-rw-rw---- 1 mysql mysql 50331648 12月 14 11:54 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 11月 29 14:28 ib_logfile1
-rw-rw---- 1 mysql mysql 18874368 12月 14 11:54 ibdata1
-rw-rw---- 1 mysql mysql 0 11月 29 14:28 multi-master.info
drwx------ 2 mysql mysql 4096 10月 18 17:43 mysql
-rwxrwxrwx 1 mysql mysql 0 12月 14 11:34 mysql.sock
drwx------ 2 mysql mysql 4096 10月 18 17:43 performance_schema
drwx------ 2 mysql mysql 4096 12月 13 11:45 school
-rw-rw---- 1 mysql mysql 24576 11月 29 14:28 tc.log
mariaDBのステータス確認
サービス起動に失敗しているみたいです。
[vagrant@asianux7 ~]$ sudo systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: inactive (dead)
(以下略)
サービス起動が失敗している原因を調べる
logを調べます。エラー箇所がわかりました。
[vagrant@asianux7 log]$ sudo view /var/log/mariadb/mariadb.log
(抜粋)
2017-12-14 11:06:26 140712117258368 [ERROR] /usr/sbin/mysqld: unknown variable 'default_password_lifetime=0'
2017-12-14 11:06:26 140712117258368 [ERROR] Aborting
my.cnf修正
パスワードを永久に変えなくてもいいように設定を入れたことを思い出しました。
どっかのサイトで調べて入れた設定なので後日調べ直したいと思います。
[vagrant@asianux7 ~]$ sudo vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
character-set-server=utf8
default_password_lifetime = 0 ←**ここを削除**
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d
(追記)default_password_lifetimeはMySQL独自の変数の様です。mariaDBでは使えない・・・
System Variable Differences Between MariaDB 10.1 and MySQL 5.7
mariaDB起動
mariaDBを起動してみます。
[vagrant@asianux7 etc]$ sudo systemctl start mariadb
あっさり成功。
mysqlログイン
ログインもできるみたいです。
[vagrant@asianux7 etc]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.2.11-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
まとめ
原因
- mariaDB起動中に設定ファイルを変更したが、不正な内容だった。
- サーバーを再起動後、自動起動設定のmariaDBサービスがエラーで起動されていなかった。
- mysqlログインでsocketエラーが表示されて、ぱっと見原因分からず。
反省というか教訓
- 設定を変えたらすぐにサービスを再起動して設定に問題がないか確認しよう。
- ググる前にログを確認しよう。(たぶん瞬殺)
- MySQLとmariaDBは別人(似てるけど)。
Tips
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) はmariaDB(またはMySQL)サービスが起動していないときに発生する。(*1)
- $sodo systemctl start mariadb で起動してみる。起動できない場合はログ等でエラーの原因を探す。
*1 翌日検証してみたところ、単にmariaDBが起動していない状態でmysqlクライアントを起動したところ同じエラー(111)にはならなかった。
暇なときにmariaDBのソースにあたるなどして確認してみたいと思います。
[vagrant@asianux7 ~]$ sudo systemctl stop mariadb
[vagrant@asianux7 ~]$ sudo systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/mariadb.service.d
└─migrated-from-my.cnf-settings.conf
Active: inactive (dead)
(略)
※mariaDBを終了させた状態でクライアントログイン
[vagrant@asianux7 ~]$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can`t connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) ←
※ダメな設定に戻す
[vagrant@asianux7 ~]$ sudo vi /etc/my.cnf
※mariaDBの起動を失敗させる
[vagrant@asianux7 ~]$ sudo systemctl start mariadb
Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.
※起動失敗の状態でクライアントログイン
[vagrant@asianux7 ~]$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can`t connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) ←
さらに粘る
ネットでもう少し英語のサイトなども漁ってみたところ、(111)は"connection refused"、つまり「アクセス拒否エラー」というものらしい。
本家のMySQLのサイトに「サーバーが実行中でないことが 1 つの原因であることがあります」(なんとも煮え切らない表現・・・)の旨の記載がありました。
6.2.7 アクセス拒否エラーの原因
なので上の方でTipsに書いた記事は間違いではなかったことになり、胸を撫で下ろしています。
ただし、(2)で出るときと(111)で出るときの違いは謎のままです。
お後がよろしい様で。