PHP7.2 连接 MySQL8.0 失败的问题解决

PHP7.2 连接 MySQL8.0 失败的问题解决

似乎每天晚上都会遇到一个让人难以入眠的问题。昨天遇到的是 PHP 连接 MySQL 数据库的问题。不过昨天晚上没能解决,今天上午弄了一上午终于找到了这篇文章:php7 连接 mysql8

最开始是运行下面的代码:

Python
1
2
3
4
5
6
7
8
9
10
<?php
$con = mysqli_connect("localhost", "root", "12345");
if(!$con) {
echo "连接失败!<br>";
echo "错误编号:".mysqli_errno()."<br>";
echo "错误信息:".mysqli_error()."<br>";
}
else{
echo "连接成功";
}

结果总是提示出错,记不清是什么样的错误了。大概解决方法如下。

按照上面提到的那篇博客中所说的,出错的原因在于:mysql8 使用 caching_sha2_password 的身份验证机制,而以往的验证机制则是 mysql_native_password

首先需要打开 my.cnf,在[mysqld]标签下添加下面的配置:

1
default_authentication_plugin=mysql_native_password

重启 MySQL 之后会发现问题还是没有被解决。因为这样只对修改配置并重启 Mysql 后的新建用户有效,而最初创建的 root 用户依然是 caching_sha2_password 的身份验证机制。

下面继续修改配置文件 my.cnf,加上(也是在哪个标签下):

1
skip-grant-tables

重启 MySQL 之后再删除刚刚添加的skip-grant-tables,然后再次重启 MySQL。

在这之后,我就神奇的发现我的 PHP 能够连接 MySQL 了!(最后几步确实很迷。)

# MySQL, PHP

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×