カテゴリー
IT MySQL PHP Web サーバー プログラム

PHPからMySQL8.0に接続できなくなった

MySQL8.0.4から、パスワードの認証方式が変わっているため(caching_sha2_password)、PHPから接続する際に、古いパスワードの認証方式(mysql_native_password)で行っていると以下のようなエラーが表示されます。

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

PHP 7.1.6、7.2.4以降から、caching_sha2_passwordに対応しています。この記事では、古い認証方式のまま接続する方法を解説します。

以下のコマンドでMySQL Serverに接続します。

mysql -u root -p

以下のSQL文で現在の設定を確認します。

SELECT user, host, plugin FROM mysql.user;

以下のように出力されるはずです。

+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

以下のSQL文でrootのパスワードを変更します。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

カテゴリー
Apache HTTP IT Web サーバー

Apacheが起動しない

新年早々、Apacheが停止してしまいました。apachectl status すると、以下のように表示されます。

 httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
           └─php-fpm.conf
   Active: failed (Result: exit-code) since Fri 2021-01-01 15:27:35 JST; 4s ago
     Docs: man:httpd.service(8)
  Process: 2130 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 2130 (code=exited, status=1/FAILURE)
   Status: "Reading configuration..."

 1月 01 15:27:35 app3.uqunie.com systemd[1]: Starting The Apache HTTP Server...
 1月 01 15:27:35 app3.uqunie.com systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
 1月 01 15:27:35 app3.uqunie.com systemd[1]: httpd.service: Failed with result 'exit-code'.
 1月 01 15:27:35 app3.uqunie.com systemd[1]: Failed to start The Apache HTTP Server.
root@app:/etc/httpd/conf.d :master $ apachectl start
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.

journalctl -xe しても有用な情報は得られません。tail /var/log/httpd/error_log したところ、有用な情報が得られました。

[Fri Jan 01 15:27:35.696005 2021] [ssl:emerg] [pid 2130:tid 140584156498240] AH02572: Failed to configure at least one certificate and key for ik1-430-47062.vs.sakura.ne.jp:80
[Fri Jan 01 15:27:35.696020 2021] [ssl:emerg] [pid 2130:tid 140584156498240] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[Fri Jan 01 15:27:35.696023 2021] [ssl:emerg] [pid 2130:tid 140584156498240] AH02312: Fatal error initialising mod_ssl, exiting.
AH00016: Configuration Failed

直接の原因は分かりませんが、SSL関連があやしそうです。

私は、/etc 以下の設定ファイルを git で管理しています。そうすると、yumapt などの パッケージ管理システム で、自動的に追加された設定が分かります。

git diff すると、あやしい設定がすぐに見つかりました。

Include /etc/letsencrypt/options-ssl-apache.conf

上記をコメントアウトしたところ、無事に起動できました。