旧系统使用php连接mysql8的一些问题及解决办法记录


系统环境是php5.6

问题一  mysql_connect()无法连接数据库No such file or directory

直接升级了mysql后,使用自带的客户端可以连接,其他第三方的数据库管理工具像navicat也可以,但是php却无法连接。查看my.cnf下的配置

如果有/tmp/mysql.sock 但是没有 /var/mysql/mysql.sock 就这样做:

cd /var
mkdir mysql
cd mysql
ln -s /tmp/mysql.sock mysql.sock

如果有 /var/mysql/mysql.sock但是没有 /tmp/mysql.sock 就这样:

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

问题二:mysql_error() Server sent charset unknown to the client。原因是mysql8默认字符集是utf8mb4导致php无法识别。修改/etc/my.cnf 添加一下设置就好了。

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8

问题三 密码兼容问题

PHP Warning: mysqli::mysqli(): The server requested authentication method unknown to the client [caching_sha2_password]
PHP Warning: mysqli::mysqli(): (HY000/2054): The server requested authentication method unknown to the client
Connect Error (2054) The server requested authentication method unknown to the client

由于mysql8的加密方式与mysql5不兼容,可以查看一下用户表下相关的用户信息

select user,host,plugin,authentication_string from user;

使用以上语句查看,就会发现都是使用了caching_sha2_password算法。

通过下面的语句把数据库中所有用户的密码都改为mysql_native_password 就可以了,下面示例使用了root作为密码,实际根据自己的情况设置即可。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

Archives