ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

MAASでデプロイしたCentOSでMariaDBとかMySQLが起動しなかったのをなんとかした話

最近、環境を用意する時はMAASをよく使うのですが、MAAS 2.6.0でCentOS 7をデプロイしてそのCentOSにMariaDBをインストールしたところ、MariaDBデーモンがどうしても起動しない問題にはまりました。

バージョンを下げたり、MariaDB本家のリポジトリーを追加してより新しいパッケージを入れてもダメ、MySQLコミュニティ版のリポジトリーを追加してMySQL Serverをインストールしてもダメです。

MySQLをインストールした後、いつものようにmysql_secure_installationコマンドを実行したら次のように表示されました。 socket '/var/lib/mysql/mysql.sock'に接続できないと。ああいけない、サービスの起動を忘れていました。

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

と言うわけで実行

# systemctl start mariadb.service

再びmysql_secure_installationを実行したら同じ結果。systemctl status mysqldを実行したらそもそもサービスがFailedしていました。そこでMySQLのログを確認しました。すると次のようなメッセージが出ていました。

/usr/sbin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: Permission denied
loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

共有ライブラリーを読み込めないですと!そんなバカな。 rpm -q libaioとか実行するとバージョンが表示されるのでインストール済みなのですがなんかおかしいのでしょうね。

と言うわけで、試しにyum reinstall libaioを実行して、再インストールしてみました。

# yum reinstall libaio -y
# systemctl start mariadb.service
Redirecting to /bin/systemctl start mysqld.service

きちんと起動したところのログを撮り忘れたのですが、MAASでデプロイしたCentOS 7できちんとMySQL Serverが起動できるようになりました。

ちなみにMariaDBについても同じ問題が発生しましたが、libaioパッケージの再インストールできちんと動作するようになったのを確認しています。ちなみにこの問題、CentOS 7をISOイメージからインストールした場合は起きませんのでご安心を。

# yum reinstall libaio
# systemctl start mariadb.service 
# systemctl status mariadb.service 
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
   Active: active (running) since 水 2019-09-11 04:57:08 UTC; 3s ago
...

MariaDBの場合は、デーモンの起動後は次のようなコマンドでルートユーザーのパスワードを設定してからmysql_secure_installationを実行する模様です。

# mysqladmin -u root password 'new-password'
# mysql_secure_installation

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。