Php MySQL服务器在自制升级后已消失
我刚刚对PHP7.2.8和MySQL 8.0.12进行了Php MySQL服务器在自制升级后已消失,php,mysql,homebrew,Php,Mysql,Homebrew,我刚刚对PHP7.2.8和MySQL 8.0.12进行了brew升级。在此之后,尝试从PHP脚本(来自Bash)连接到MySQL将在10秒后超时(默认MySQL超时值) 我周围的一切似乎都很正常。我没有在设置中更改任何其他内容。从Bash连接到MySQL工作正常。如何从PHP重新获得MySQL访问权限 $ php -i | grep php.ini Configuration File (php.ini) Path => /usr/local/etc/php/7.2 Loaded Conf
brew升级。在此之后,尝试从PHP脚本(来自Bash)连接到MySQL将在10秒后超时(默认MySQL超时值)
我周围的一切似乎都很正常。我没有在设置中更改任何其他内容。从Bash连接到MySQL工作正常。如何从PHP重新获得MySQL访问权限
$ php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php/7.2
Loaded Configuration File => /usr/local/etc/php/7.2/php.ini
$ tail /usr/local/etc/php/7.2/php.ini
mysql.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket = /tmp/mysql.sock
$ ls /tmp/mysql*
srwxrwxrwx 0 /tmp/mysql.sock
-rw------- 5 /tmp/mysql.sock.lock
srwxrwxrwx 0 /tmp/mysqlx.sock
-rw------- 6 /tmp/mysqlx.sock.lock
$ mysql
Welcome to the MySQL monitor.
mysql> show variables like '%socket%';
+-----------------------------------------+------------------+
| mysqlx_socket | /tmp/mysqlx.sock |
| socket | /tmp/mysql.sock |
+-----------------------------------------+------------------+
解决方案:将其添加到MySQL配置文件(my.cnf
):
:
MySQL 8默认为caching_sha2_password
,这是一个早期PHP版本无法识别的插件。
相反,通过在my.cnf
中设置default\u authentication\u plugin=mysql\u native\u password
来更改它。这个
缓存\u sha2\u密码
插件将在未来的PHP中得到支持
释放
我希望这将为其他人节省一些头痛和时间。这是一个不需要更改默认身份验证配置的解决方案
mysql> create user 'username'@'host' identified with mysql_native_password by 'password';
MySQL 8.0参考:和
一旦PHP更新为SHA-256身份验证,您可以再次“更改用户”以通过缓存sha2密码进行标识。我已经这样做了(切换到以前版本的PHP和MySQL时),但切换到当前版本时,我必须更改配置。至少在我的机器上是这样的。如果这对你来说不明显,就像对我一样-你应该把配置放到my.cnf中,而不是php.ini中。它应该是default\u authentication\u plugin
(下划线,而不是破折号)。@John-MichaelL'Allier:你基本上是对的。感谢@forthrin的跟进。我原以为连字符只用于CLI选项。我不知道它们也可以用在配置文件中!
[mysqld]
default_authentication_plugin=mysql_native_password
mysql> create user 'username'@'host' identified with mysql_native_password by 'password';