0

My attempts to upgrade homebrew PHP 7.3.12 to PHP 7.4.0 have failed.

Here's what I did:

brew update
sudo brew services stop php
brew upgrade
brew cleanup
brew doctor
sudo brew services start php
brew services list
sudo reboot now

Here's what I expected:

The server to come back up as expected.

Here's what happened:

WordPress 5.3 frontend and backend both report the dreaded "Error establishing a database connection" error.

phpMyAdmin reports the following three errors:

  1. Cannot log in to the MySQL server
  2. mysqli_real_connect(): Unexpected server response while doing caching_sha2 auth: 109
  3. mysqli_real_connect(): (HY000/2006): MySQL server has gone away

Here's what I did next:

Ensured correct username and password for MySQL. Ensured correct hostname. Ensured MySQL is running:

mysqladmin -u root -p status
Enter password: 
Uptime: 173  Threads: 2  Questions: 3  Slow queries: 0  Opens: 113  Flush tables: 3  Open tables: 35  Queries per second avg: 0.017

Made the following changes to the PHP 7.4 ext-opcache.ini file:

opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 50000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 2

Made the following changes to the PHP 7.4 php.ini file:

expose_php = Off
max_execution_time = 90
max_input_time = 90
max_input_vars = 2000
memory_limit = -1
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
upload_max_filesize = 3G
post_max_size = 0
default_socket_timeout = 180
date.timezone = America/Chicago
pdo_mysql.default_socket = /tmp
mysqli.default_socket = /tmp/mysql.sock

installed the following PHP 7.4 extensions:

pecl channel-update pecl.php.net
pecl install apcu
pecl install imagick
pecl install redis

Additional information:

My httpd log reports nothing unusual:

[Sat Nov 30 20:53:48.021678 2019] [mpm_prefork:notice] [pid 140] AH00163: Apache/2.4.41 (Unix) OpenSSL/1.1.1d configured -- resuming normal operations
[Sat Nov 30 20:53:48.021785 2019] [core:notice] [pid 140] AH00094: Command line: '/usr/local/opt/httpd/bin/httpd -D FOREGROUND'

Similarly, my MySQL log reports nothing unusual:

2019-12-01T03:07:00.6NZ mysqld_safe Logging to '/usr/local/var/mysql/moriarty.local.err'.
2019-12-01T03:07:00.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2019-12-01T03:07:02.994684Z 0 [System] [MY-010116] [Server] /usr/local/opt/mysql/bin/mysqld (mysqld 8.0.18) starting as process 398
2019-12-01T03:07:03.012177Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2019-12-01T03:07:06.203718Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-12-01T03:07:06.277615Z 0 [System] [MY-010931] [Server] /usr/local/opt/mysql/bin/mysqld: ready for connections. Version: '8.0.18'  socket: '/tmp/mysql.sock'  port: 3306  Homebrew.
2019-12-01T03:07:06.337877Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/tmp/mysqlx.sock' bind-address: '127.0.0.1' port: 33060
Michael Fraase
  • 621
  • 1
  • 7
  • 11
  • Not specific to MacOS. I have the same problem on a CentOS machine with php 7.4 and MySQL 8.0.18 – GGets Dec 01 '19 at 08:21

1 Answers1

2

This is a bug. I will take a wild guess that it has to do with bumping up the version of mysqlnd client API library version to 7.4.0 from the previous 5.0.12.

While you could temporarily set the default authentication plug-in to native password by adding default_authentication_plugin = mysql_native_password to the [mysqld] section of my.cnf which is QUITE LESS SECURE, I would recommend downgrading php (I can confirm version 7.3.1 runs successfully and probably other 7.3 versions, too) until it is fixed, unless you're using the native password mechanism, anyway.

GGets
  • 416
  • 6
  • 19
  • 2
    Oh, noes. Is this the same mysql_native_password nonsense I reported here: https://stackoverflow.com/questions/50126503/homebrew-mysql-8-support/50851315#50851315 (MySQL 8.0.11 uses caching_sha2_password as the default authentication method). For what it's worth, homebrew PHP 7.3 (through PHP 7.3.12) worked flawlessly for me. Thanks. – Michael Fraase Dec 02 '19 at 00:44