CentOSでMySQL(MariaDB)をインストールしたがソケットエラーで起動しない問題を解決

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
勉強会で聞いた!評判のプログラミングスクール3選
ポテパンキャンプ

【特長】
3ヶ月のスクール代を全額キャッシュバック!
実質無料で学べるプログラミングスクールです。

【こんな人にオススメ】
・Railsチュートリアルをやり切った
・お金はないがやる気はある
・Ruby/Railsを中心に学びたい
・初心者の域を脱したい

TECH::EXPERT

【特長】
600時間の学習!
スパルタカリキュラムで高収入な転職を実現させるプログラミングスクールです。

【こんな人にオススメ】
・最短最速でエンジニア転職したい
・今の環境をいますぐ変えたい
・お金があってやる気もある
・もう挫折したくない

DMM WEBCAMP

【特長】
転職成功率98%
基礎からプロダクト制作まで徹底したカリキュラムで学べるプログラミングスクールです。

【こんな人にオススメ】
・Web系企業に就職・転職したい
・インフラ系からスキルチェンジしたい
・短期間で集中して学びたい
・チーム開発を学びたい

PHP
この記事を書いた人

元専業アフィリエイター・ブロガー。
現在はWebエンジニアの27歳。
運営メディアは月間150万pvを超えたことも。

YUUKIをフォローする
シェアする
YUUKIをフォローする
YUUKIのWebエンジニア道