php - PHP 7.4 和 MySQL 连接
问题描述
我在另一个论坛上发布了这个,认为它与 Ubuntu 相关,MySQL 不能很好地与 PHP 配合使用,但后来我意识到 mysqli 确实在加载并与之通信,因为 phpinfo() 表明 mysqli 正在运行,所以我的问题是似乎与 PHP 7.4 版连接数据库的方式发生了变化有关。
它显然与密码有关,因此即使不向后兼容,也必须对其进行哪些更改才能使其工作?我的本地开发数据库使用一个简单的密码,我不确定我需要做什么才能让它再次工作,同时仍保持与实时服务器上旧 MySQL 5.X 的兼容性,但我的站点使用此功能进行连接。
我确实在这里和其他地方查看了另一个帖子和其他几个帖子,并尝试了上面链接示例中提供的测试代码,但仍然无法连接。
function dbConn($DBname) {
global $DBhost;
global $DBusername;
global $DBpass;
$dbconn = new mysqli($DBhost, $DBusername, $DBpass, $DBname);
mysqli_set_charset($dbconn,"UTF8");
return $dbconn;
}
我正在运行带有 Apache2 2.4.41 和 MySQL 8.0.18 的 Ubuntu 19.10,即使启用了mysql_native_password,它也会出错。
Warning: mysqli::__construct(): Unexpected server response while doing caching_sha2 auth: 109 in /var/www/html/testsite.loc/db_test.php on line 32
Warning: mysqli::__construct(): (HY000/2006): MySQL server has gone away in /var/www/html/testsite.loc/db_test.php on line 32
Warning: mysqli::query(): Couldn't fetch mysqli in /var/www/html/testsite.loc/db_test.php on line 33
Fatal error: Uncaught Error: Call to a member function fetch_row() on bool in /var/www/html/testsite.loc/db_test.php:34 Stack trace: #0 {main} thrown in /var/www/html/testsite.loc/db_test.php on line 34
解决方案
根本问题是为用户分配了不受支持的身份验证插件,这导致密码不匹配。您可以不同地配置您的开发 MySQL 服务器,以建立类似的环境。为此,您必须编辑/etc/mysql/my.cnf
:
[mysqld]
...
default-authentication-plugin = mysql_native_password
但是,我宁愿建议将生产环境升级到 PHP 7.4 和 MySQL 8.0,以便使用caching_sha2_password
它,这是自 MySQL 8.0 以来的默认身份验证插件。还可以在部署期间通过 MySQL CLI 更新密码——但运行相同的配置是最轻松的——并且测试它最可靠。
升级到 MySQL 8.0 : Default Authentication Plugin Considerations详细解释了它。
推荐阅读
- r - 使用 ggplot 制作直方图的问题
- python-3.x - Tornado HTTPServer 在收到 POST 请求时将对象添加到队列中
- python - 在 WSL (Ubuntu) 中为 python3 安装 venv
- c++ - 使用带有模板推导的 boost 变体
- java - Optaplanner 为 ConstraintProvider 类中的员工允许的最大轮班数量添加约束
- css - 将 CSS 动画应用于正方形(动态更改边框大小和正方形大小)
- php - 警告:mysqli_real_connect(): (HY000/2002): 第 1626 行 /var/www/html/wp-includes/wp-db.php 中没有这样的文件或目录
- javascript - 如果其他控件没有值,如何使复选框保持禁用状态,如果控件在 angular8 中有值则启用
- servicestack - 拦截 Fluent 验证
- image-processing - Pytorch - 推理时损失 0.000 和 keyerror