要问最近半年什么技术最火?毫无疑问是 ChatGPT,虽然我们是在隔岸观火。

如何利用 ChatGPT,作为学习和工作的帮手,提升自己呢?我走了一段弯路,曾经问过敏感问题,发现它是端水大师;问过文学问题,发现它杜撰太多,而且证伪成本很高;设过问题陷阱,诸如:父母能结婚吗,它的回答并不能显示我自己的高明;最后,我决定跟 ChatGPT 学编程,一则这是它的强项,二则代码可以通过实地运行来检验。

ChatGPT 帮我解决的第一个问题,是 PHP 7.2 连接 MySQL 8 的故障,首先我确认 MySQL 正常,因为控制台访问、PHP 8 连接都没问题,PHP 7.2 本身也没有问题,PDO 驱动正常安装,加载顺利。我曾尝试在 CSDN 上找答案,感觉自己走进了一座垃圾山,而且层峦叠嶂。网络稍好一些,我请教 ChatGPT,以下是对话记录:

问:

我的操作系统是 macOS Bigsur,通过源码编译安装 PHP 7.2.24,已经选择 MySQL ND,phpinfo() 显示已经加载 PDO 驱动,但无法连接 MySQL ,请问什么原因?

答:

可能有以下几个原因导致无法连接 MySQL 数据库:

  1. 检查 MySQL 服务是否已经启动。你可以通过终端命令 sudo service mysql status 或者 sudo systemctl status mysql 来检查 MySQL 服务的状态,如果服务没有启动,你可以通过 sudo service mysql start 或者 sudo systemctl start mysql 命令来启动服务。
  2. 检查 MySQL 是否允许远程连接。默认情况下,MySQL 只允许本地连接,如果你需要远程连接 MySQL,你需要修改 MySQL 配置文件,允许远程连接。你可以在 MySQL 配置文件中 my.cnf 或者 my.ini 中添加以下行:
[mysqld]
bind-address=0.0.0.0

注意,这会将 MySQL 开放到所有 IP 地址,如果你需要更加安全的设置,你可以指定具体的 IP 地址。

  1. 检查 PDO 的连接参数是否正确。确保你的 PDO 连接参数中包括正确的主机名、用户名、密码、数据库名等信息。你可以在终端中通过 mysql -u username -p 命令来验证 MySQL 用户名和密码是否正确。
  2. 检查 PHP 是否正确加载了 PDO MySQL 驱动。你可以在终端中运行 php -m 命令来查看是否已经加载了 PDO MySQL 驱动。如果没有加载,你可以检查 PHP 的 php.ini 文件是否正确配置了 PDO MySQL 驱动。
  3. 确认 MySQL 数据库版本是否支持 PDO MySQL 驱动。如果你使用的 MySQL 数据库版本过旧,可能不支持 PDO MySQL 驱动。你可以尝试更新 MySQL 数据库版本或者使用其他的数据库驱动。

希望以上解决方案能够帮助你解决问题。

问:

你回答的前四条,我都检查过了,没问题,第五条 我的 MySQL 版本是 8.2,连不上,有什么解决办法?

答:

如果你的 MySQL 版本是 8.0 或以上,并且仍然无法连接,可能是因为 MySQL 8.0 及以上版本默认使用了新的身份验证插件(caching_sha2_password),而旧版本的 MySQL 驱动程序不支持该插件。

要解决此问题,你可以尝试以下两种方法之一:

  1. 更新 PHP MySQL 驱动程序:如果你使用的是 PHP 7.2.24 版本的源代码编译安装,你可以尝试更新 PHP MySQL 驱动程序。可以使用 PECL 工具安装最新的驱动程序。在终端中输入以下命令:
sudo pecl install mysqlnd

然后在 php.ini 文件中启用驱动程序:

extension=mysqlnd.so
  1. 更改 MySQL 身份验证插件:你可以更改 MySQL 的身份验证插件以使用旧版本的 MySQL 驱动程序。可以通过以下步骤更改身份验证插件:

1)使用管理员权限登录到 MySQL 服务器;

2)运行以下命令更改 root 用户的身份验证插件(假设你使用的是 caching_sha2_password 插件):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
  1. 修改 my.cnf 配置文件,在 [mysqld] 下添加以下行:
default_authentication_plugin=mysql_native_password
  1. 重启 MySQL 服务器。

希望这些解决方案能够帮助你解决问题。


这是关于 MySQL 的一份非常好的知识清单,且逻辑清晰,ChatGPT 的第二次答复,完美的解决了我的问题。

最后修改:2023 年 04 月 12 日
如果觉得我的文章对你有用,请随意赞赏