DockerのMySQLで「New main PID ●● does not belong to service, and PID file is not owned by root. Refusing.」

MySQL
スポンサーリンク

環境

  • 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つの対処法が考えられます。

  1. PIDファイルの所有者を、OS側の「mysql」ユーザーにして、mysqlサーバーを起動させる
  2. PIDファイルを削除して、mysqlサーバーを起動させる。

このうち、
1. PIDファイルの所有者を、OS側の「mysql」ユーザーにして、mysqlサーバーを起動させる
の方法を試したのですが、事象変わらずでした。
ですが、後で考えると、もしかしたら起動していたのかもしれません。

続いて、

  1. 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

で分かります。

次の記事にもまとめてます。

コメント