PHP7.4的mysqli出现“gone away”超时问题。

8

我刚安装了php7.4,一切似乎都没问题,但当我尝试访问我的phpmyadmin时,无法连接: 在此安装之前php7.3可以正常使用

错误信息是:

mysqli_real_connect(): Unexpected server response while doing caching_sha2 auth: 109
 mysqli_real_connect(): (HY000/2006): MySQL server has gone away

我查看了我的PHP MySQL库:php7.4-mysql,它已经安装好了。 有什么遗漏的吗? 谢谢。
NOTICE: Not enabling PHP 7.4 FPM by default.
NOTICE: To enable PHP 7.4 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.4-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Traitement des actions différées  triggers ») pour libapache2-mod-php7.4 (7.4.
0-1+ubuntu19.10.1+deb.sury.org+1) ...

apt-cache policy php7.4
php7.4:
  Installé : 7.4.0-1+ubuntu19.10.1+deb.sury.org+1
  Candidat : 7.4.0-1+ubuntu19.10.1+deb.sury.org+1
 Table de version :
 *** 7.4.0-1+ubuntu19.10.1+deb.sury.org+1 500
        500 http://ppa.launchpad.net/ondrej/php/ubuntu eoan/main amd64 Packages
        500 http://ppa.launchpad.net/ondrej/php/ubuntu eoan/main i386 Packages
        100 /var/lib/dpkg/status

你按照提示做了吗? - RiggsFolly
是的,我会这样做。 - Michel
注意:使用PhpStorm,我可以看到我的数据库。连接正常。 - Michel
我在日志中看到了这个错误:MySQL服务器已经关闭。 - Michel
4个回答

3

我遇到了同样的问题,但使用mysql_native_passwordPHP7.4-mysql-pdo中不可行,即使在my.cnf中设置它也无效,而在PHP7.3-mysql-pdo中有效。

我不得不使用以下查询来修改每个用户

ALTER USER 'username'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

username 是数据库用户名,password 则为数据库用户的密码。


2
如果您仍在使用已过时的mysql_native_password方法,这是极不推荐的,因为它被认为不够安全,您可以通过将default_authentication_plugin = mysql_native_password添加到my.cnf[mysqld]部分来设置默认身份验证插件为本机密码。

1
在文件/etc/mysql/my.cnf中, 在[mysqld]之后添加: default-authentication-plugin = mysql_native_password
我的/etc/mysql/my.cnf示例:
[mysqld]
user   = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket   = /var/run/mysqld/mysqld.sock
port   = 3306
basedir    = /usr
datadir    = /var/lib/mysql
tmpdir   = /tmp
lc-messages-dir  = /usr/share/mysql
log-error    = /var/log/mysql/error.log
explicit_defaults_for_timestamp

bind-address = 0.0.0.0

# PHP 7.4 Fix
default-authentication-plugin = mysql_native_password

# Recommended in standard MySQL setup
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0


记住使用 mysql_native_password 不太好,因为存在安全问题。

0

你可以像这样更改密码的加密方式。

ALTER USER 'yourusername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'youpassword';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接