前言
由于某种原因,个人服务器的mysql需要从mysql5升级到mysql8,但是版本升级之后,wordpress遇到各种问题,就此记录一下。本文相关的环境为,centos7 + nginx + mysql8 + php7。
关于mysql版本升级的文章,可以参考《linux mysql5.7升级到mysql8.0》。
有需要自己部署wordpress个人网站的,可以参考本站《lnmp+wordpress手动搭建》。
问题一:php缺少mysql插件,Your PHP Installation Appears to Be Missing the MySQL Extension Which Is Required by WordPress
问题描述
如果显示这个问题,说明php缺少了mysql的插件,具体原因可以参考这篇博客。
首先确认一下,是否真的缺少了插件。我们通过访问phpinfo页面,查询php已安装的插件。
把下面语句,新建一个php文件放到网站根目录即可。
<?php
phpinfo( );
?>
如下图,如果你看不到以下mysqli和mysqlnd的内容,说明就是缺少了mysql插件。那么需要自行安装插件。
解决方案
首先删除php-mysql插件,这一步其实可以不做,但为了以防万一,还是尝试把php-mysql删除。
yum remove php-mysql
再通过yum安装php-mysql插件
yum install -y php70w-mysqlnd
安装成功后,通过下面代码查看mysqlnd插件
php -i | grep mysqlnd
显示如下信息,就是mysql插件安装成功。
重启web服务即可。
sudo systemctl restart httpd
但是!
这个时候,我遇到了另一个问题。
httpd重启失败!
然后参考了这篇文章《http启动(重启)报错》
从上图,很明显看到是80端口被占用了,所以按照该文提示的,把占用80端口的进程关掉即可。然而我的情况是,nginx占用了80端口。为了避免同样情况再次发生,我是采用了修改httpd的默认端口。方法如下:
找到httpd的配置文件,再修改端口。
vim /etc/httpd/conf/httpd.conf
找到Listen 80
这一行,修改为你想要的端口。
然后再重启httpd服务即可。
这时候再重新访问刚开始的phpinfo页面,就能找到已经安装的mysqli和myslqnd插件了。
问题二:wordpress连接mysql失败,Error establishing a database connection
以为把php-mysql插件安装好了,问题就得以解决,但还是遇到了这个,连接mysql失败。这个情况,首先是检查自己wordpress根目录下面的wp-config.php
,里面填写的mysql登陆信息是否正确。如果正确,则需要以下方法解决。
问题如图
解决方案
由于mysql8对密码的加密方式修改成了caching_sha2_password
,wordpress网站连接mysql,实际就是通过php连接mysql,而php所带的mysqlnd(就是问题一安装的mysql插件),并不支持caching_sha2_password
这种验证方式,因此需要修改mysql的验证方式。具体解决如下:
1、修改mysql的账号密码和验证方式
进入mysql,通过以下语句修改wordpress的mysql账号密码。IDENTIFIED WITH mysql_native_password BY 'password'
这一句一定要一次过写,不要分开设置。
mysql> ALTER USER 'username'@'locaohost' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> flush privileges;
修改完密码后,建议查询user表,检查一下是否修改成功。
2、修改mysql的默认验证机制
一般完成第1步修改mysql_native_password
验证方式的密码,就可以正常访问wordpress了。如果修改完后,还显示同样问题,则需要修改mysql的验证机制,配置文件在/etc/my.cnf
。
在配置文件中,新增一行,或者找到这一行,取消注释。
default-authentication-plugin=mysql_native_password
改完配置后,重启mysql。
sudo systemctl restart mysqld
完成这一步,wordpress终于可以正常访问了。
吓得我不敢升级了。php7+mysql5.7再用100年。
没事的,多折腾,技术才能提升😂