系统环境是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';