PHP8.0.1でLAMP環境を構築すべくMariaDBをインストールしたものの、予期せぬエラーが発生しました。なんとか直ったので解決方法をまとめました。
環境情報
ゲストOS:CentOS7
ホストOS:MacOS
仮想環境:VirtualBox
インストール手順
①yumでインストール
[root@localhost ~]# yum install mariadb mariadb-server
②インストール出来たか確認
[root@localhost ~]# rpm -qa | grep maria
mariadb-server-5.5.68-1.el7.x86_64
mariadb-libs-5.5.68-1.el7.x86_64
mariadb-5.5.68-1.el7.x86_64
③mariadbを起動
[root@localhost ~]# systemctl start mariadb
ここで起動するかと思いきや・・
/var/lib/mysql/mysql.sockに接続できません
[root@localhost ~]# Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.
[root@localhost ~]# systemctl status mariadb.service
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
/var/lib/mysql/mysql.sockに接続できない模様。そもそもファイルは存在するのかとりあえず見てみる
[root@localhost ~]# ls /var/lib/mysql/
aria_log.00000001 ib_logfile0 ibdata1 mysql.sock test/
aria_log_control ib_logfile1 mysql/ performance_schema
普通にありますね。なぜ接続できないんだろう?
とりあえずシステムログをみてみる
[root@localhost ~]# less /var/log/messages | grep mariadb
Jan 23 06:50:47 localhost systemd: mariadb.service: control process exited, code=exited status=1
Jan 23 06:50:47 localhost systemd: Unit mariadb.service entered failed state.
Jan 23 06:50:47 localhost systemd: mariadb.service failed.
Jan 23 06:50:48 localhost mariadb-prepare-db-dir: Database MariaDB is not initialized, but the directory /var/lib/mysql is not empty, so initialization cannot be done.
Jan 23 06:50:48 localhost mariadb-prepare-db-dir: Make sure the /var/lib/mysql is empty before running mariadb-prepare-db-dir.
/ var / lib / mysqlが空ではないため、初期化を実行できません。
とのこと。
空にしなきゃいけないのか。ディレクトリの中身を消してみる。
[root@localhost ~]# rm -rf / var/lib/mysql/*
もう一度mariadbを起動
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: active (running) since 土 2021-01-23 19:20:34 JST; 1h 2min ago
Main PID: 3404 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─3404 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─3581 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/...
1月 23 19:20:32 localhost.localdomain systemd[1]: Starting MariaDB database server...
1月 23 19:20:32 localhost.localdomain mariadb-prepare-db-dir[3370]: Database MariaDB is probably initialized in /var/lib/mysql already, nothing is done.
1月 23 19:20:32 localhost.localdomain mysqld_safe[3404]: 210123 19:20:32 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
1月 23 19:20:32 localhost.localdomain mysqld_safe[3404]: 210123 19:20:32 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
1月 23 19:20:34 localhost.localdomain systemd[1]: Started MariaDB database server.
お、起動した。
原因は何だったのかというと、実はPHPをインストールする時にネット上のコマンドをコピペした際に
mysqlをインストールしていたけど不要になったから一度removeしたつもりが、古いvar/lib/mysql/mysql.sockが残っていたというものでした。
という訳で、再インストールした際はvar/lib/mysql配下は削除するようにしましょう。
起動に成功したら、自動起動をオンにしておきましょう。
[root@localhost ~]# systemctl enable mariadb
[root@localhost ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since 土 2021-01-23 19:20:34 JST; 1h 2min ago
Main PID: 3404 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─3404 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─3581 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/...
1月 23 19:20:32 localhost.localdomain systemd[1]: Starting MariaDB database server...
1月 23 19:20:32 localhost.localdomain mariadb-prepare-db-dir[3370]: Database MariaDB is probably initialized in /var/lib/mysql already, nothing is done.
1月 23 19:20:32 localhost.localdomain mysqld_safe[3404]: 210123 19:20:32 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
1月 23 19:20:32 localhost.localdomain mysqld_safe[3404]: 210123 19:20:32 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
1月 23 19:20:34 localhost.localdomain systemd[1]: Started MariaDB database server.
root権限でエラーになることも
root権限で手動でインストールした場合、var/lib/mysql/mysql.sockの権限が本来はmysqlであるところをroot権限になってしまい、実行不可でエラーとなってしまうこともあるようです。
その場合は、以下のコマンドでmysqlオーナーに変更しましょう。
[root@localhost ~]# chown mysql:mysql /var/lib/mysql/
[root@localhost ~]# ls -l /var/lib/mysql/mysql.sock
-rw-r--r-- 1 mysql mysql 0 1月 23 19:20 mysql.sock
なお、僕の場合はパーミッション777になってました。
[root@localhost ~]# ls -l /var/lib/mysql/
合計 28700
-rw-rw---- 1 mysql mysql 16384 1月 23 19:08 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 1月 23 19:08 aria_log_control
-rw-rw---- 1 mysql mysql 5242880 1月 23 19:20 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 1月 23 06:51 ib_logfile1
-rw-rw---- 1 mysql mysql 18874368 1月 23 19:08 ibdata1
drwx------ 2 mysql mysql 4096 1月 23 06:51 mysql
srwxrwxrwx 1 mysql mysql 0 1月 23 19:20 mysql.sock
drwx------ 2 mysql mysql 4096 1月 23 06:51 performance_schema
drwx------ 2 mysql mysql 6 1月 23 06:51 test
おまけ:インストール後に文字コードをUTF-8に変更しましょう
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
character-set-server=utf8 #追加
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid