環境
- Dockerコンテナ
- 公式CentOS7.7イメージ
- MySQL5.7をインストール
具体的手順
Dockerを利用して、
FROM centos:7.7.1908
でコンテナを作成しました。
それから、CentOSコンテナ内において、
以下の手順でMySQLをインストールしました。
MySQLのリポジトリを追加。
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
MySQL80リポジトリを無効化。
yum-config-manager --disable mysql80-community
MySQL57リポジトリを有効化。
yum-config-manager --enable mysql57-community
新しいGPGキー追加
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
MySQLサーバーをインストール
yum -y install mysql-community-server
MySQLクライアントをインストール
yum -y install mysql-community-client
事象
以下のコマンドでMySQLを起動しようと試みました。
systemctl start mysqld
しかし、いつまで待ってもプロンプトが返ってこず、MySQLの起動処理が終了しませんでした。
ですので、Ctrl+C キーで中断させました。
systemctl status mysqld
のコマンドでステータスを確認すると、以下のエラーメッセージが出力されていました。
# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: activating (start) since Mon 2023-04-10 19:16:30 JST; 1min 11s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 75 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 56 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
CGroup: /docker/4f60792b85980ad65bf7a38537cb9b2ca80c9224d32b6fe1bddc1b02dd8709ab/system.slice/mysqld.service
└─83 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Apr 10 19:16:30 4f60792b8598 systemd[1]: Starting MySQL Server...
Apr 10 19:16:33 4f60792b8598 systemd[1]: New main PID 83 does not belong to service, and PID file is not owned by root. Refusing.
Apr 10 19:16:33 4f60792b8598 systemd[1]: New main PID 83 does not belong to service, and PID file is not owned by root. Refusing.
原因
MySQLのPIDファイルの所有者がrootでは無いからということみたいです。
ややこしいですが、ここで言うrootは、MySQLから見ると、mysqlユーザーということになり、OS側のrootユーザーとは違うみたいです。
対処
2つの対処法が考えられます。
- PIDファイルの所有者を、OS側の「mysql」ユーザーにして、mysqlサーバーを起動させる
- PIDファイルを削除して、mysqlサーバーを起動させる。
このうち、
1. PIDファイルの所有者を、OS側の「mysql」ユーザーにして、mysqlサーバーを起動させる
の方法を試したのですが、事象変わらずでした。
ですが、後で考えると、もしかしたら起動していたのかもしれません。
続いて、
- PIDファイルを削除して、mysqlサーバーを起動させる。
こちらを実施しました。
そして再度MySQLサーバーの起動を実施。
systemctl status mysqld
しかしながらこちらもプロンプトが返ってきません。
Ctrl-Cにて中断させました。
ですが、
systemctl status mysqld
にてエラーが出なくなっていることに気づきました。
chatGPT先生に聞いたら、
ps -ef | grep mysql
してみたら?
と言われたので、
試してみると、
MySQLは起動していました。
プロンプトが返ってこない理由は不明です。
その後、MySQLにrootでアクセスできない
MySQLにrootでアクセスできない!
と思ったが、できました。
結論を書くと、MySQL5.7は、デフォルトでrootのパスワードが自動作成されるので、それをつかってアクセスする必要があるのでした。
rootのPWは
grep root /var/log/mysqld.log
で分かります。
次の記事にもまとめてます。
コメント