(本文的办法只限Linux主机) 虽然我不是Wordpress的用户,但是调试MySQL最好的办法是安装Wordpress,所以我会隔一两年、几年在本机安装Wordpress。出现“您的PHP似乎没有安装运行WordPress所必需的MySQL扩展”,虽然是一个公认的老掉牙的问题,我为了开发一键LAMP/LNMP的MySQL安装部分,经过这几天的多系统调试,发现出现这个提示,并没有大家想象中的简单,是一个有些复杂的问题,尤其是现在到了PHP 7更容易出现这个报错。
出现这个提示唯一的原因是:Linux主机没有安装MySQL扩展。
如果您的主机是用纯手动输入Shell命令安装的LAMP或LNMP,容易出现这个提示。
经过多系统的调试,Debian、Ubuntu、CentOS的Apache/Nginx、PHP,甚至MySQL,需要的组件几乎都是一模一样的,只是命令会有少量区别。
解决“您的PHP似乎没有安装运行WordPress所必需的MySQL扩展”的提示,只需这2步,或者说安装MySQL时,只需安装这2个:
CentOS 5/6:
yum -y install mysql-server php-mysql;
CentOS 7:
yum -y install mariadb-server php-mysql;
Debian 7/8和Ubuntu 12/14:
apt-get -y install mysql-server php5-mysql;
Debian 9/10和Ubuntu 16及以上的版本:
apt -y install mariadb-server php-mysql;
如果系统已安装了Apache/Nginx、PHP,只需安装上述这2个,就可以正常运行Wordpress,然后需要重启Apache/Nginx、重启MySQL,就不会有标题的错误提示。
PHP 7.X下出现这个报错
Ubuntu 16及以上的版本、Debian 9.9及以上的版本,自带源的PHP版本都是PHP 7.X,用上述命令安装,也不会有标题的报错。
如果一旦用第三方的软件源安装,安装完毕,就会有“您的PHP似乎没有安装运行WordPress所必需的MySQL扩展”的报错。
原因在哪里呢?经过昨天一天的排查,是因为如果改用了第三方的软件源的PHP版本,则php-mysql扩展安装时,这个软件名称必须带版本号。CentOS 6/7比较好解决,解决办法是先安装php-mysql,然后再安装PHP 7.X,这样等于是把PHP 5的php-mysql移植到PHP 7.X下。
CentOS的解决办法2,如果此时已经安装第三方软件源的PHP 7.X,则先卸载PHP 7.X,再安装php-mysql,再安装PHP 7.X,标题的报错会解决。
CentOS 5/6/7安装php-mysql的命令:
yum -y install php-mysql;
(注:如果系统里已经安装第三方软件源的PHP 7.X,此时运行yum -y install php-mysql,会有报错,报错内容和原因如前文。)
上述这个移植的方法,到了Debian 7/8/9、Ubuntu 12/14/16下尝试,都行不通。需要给php-mysql加版本号。如果是Debian 9/10和Ubuntu 16及以上的版本用自带源的方法安装PHP 7.X,则php-mysql不用加版本号,命令是:
apt-get -y install php-mysql;
如果Debian、Ubuntu使用第三方软件源安装的PHP,此时php-mysql的版本号写在“php”的后面,例如php7.4-mysql,而且最好在安装PHP的时候一同安装,语句写在一起,例如:
Debian 8/9/10通过sury安装PHP 7.4:
(sury命令由于有时效变化,省略……)
apt update; apt -y install php7.4 php7.4-mysql;
Ubuntu命令和方法同上:
Ubuntu 16及以上的版本通过PPA安装PHP 7.4:
(PPA命令由于有时效变化,省略……)
apt update; apt -y install php7.4 php7.4-mysql;
CentOS 6/7如果用了第三方软件源remi安装的PHP 7.X,除了上述的2种解决办法,还可以用Debian、Ubuntu同样的方法来安装php-mysql扩展,同样需要加版本号,只不过版本号变为一个安装参数,命令如下:
yum -y install epel-release;
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
(↑CentOS 7)
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-6.rpm
(↑CentOS 6)
yum -y --enablerepo=remi-php74 install php php-mysql;
经过多系统的测试,LAMP、LNMP下,MySQL、php-mysql扩展的安装命令、步骤和调试没有任何区别,所以上述的方法在LAMP、LNMP均适用。
最后,LAMP需要重启Apache、重启MySQL;LNMP需要重启Nginx、重启fpm、重启MySQL。
本文的方法已在上述提到的所有系统、PHP 5、PHP 7.X、PHP 7.4+Wordpress里测试通过,所以写下这篇总结。
重点说明:Linux主机安装php-mysql扩展不需要修改php.ini
在尝试出本文的解决办法之前,我前几天搜遍了网络,有少量文章很有帮助,其中有一篇是完整安装Wordpress的过程,正是由于这个成功的安装过程,才为我找到解决办法提供了启发。而搜到的很多文章,是相同的复制。复制如果是用于备份,对读者是有益的,防止优秀的技术失传。但是相同的网页太多,影响搜索引擎的结果的质量,占用读者的时间。
其中这些相同的文章里,有很多提到修改Linux主机下的php.ini,并且编译出一个msql.so或者mysql.so。这个方法我试了很久,没有成功。
本文是通过安装php-mysql、或php5-mysql、或php7.X-mysql解决的,全程没有修改php.ini。
附带说明
附1:Debian 9.1的自带源是PHP 5,Debian 9.9的自带源是PHP 7,所以上述的命令里的php-mysql可能会有不同,凡是自带源是PHP 5,则Debian、Ubuntu的名称是php5-mysql;如果自带源是PHP 7,则名称是php-mysql。
但是,无论Debian 9.X的自带源是PHP 5,还是PHP 7,都可以统一用这个命令:
apt -y install php-mysql;
附2:除了php-mysql安装时会涉及到版本号的问题,Debian、Ubuntu系统下的php5-gd的这个扩展,同样和php-mysql有可能也需要相应地加版本号,这一项未在多系统下测试。
php5-gd是一个重要的PHP扩展,它用于处理图片,例如产生缩略图。
附3:如前文的测试,虽然CentOS的PHP性能跑分不如Debian、Ubuntu系统,但是CentOS系统也有一些做得很好的地方,比如安装软件时不需要版本号,如php、php-mysq、php-gd这些组件。
附4:mysql-server、或mariadb-server不受PHP 5、PHP 7版本号的影响。
PHP 5、或PHP 7下安装的mysql-server理论上是完全相同的。例如Debian 8.0+自带源PHP 5.6.40和Debian 8.0+sury+PHP 7.4.0,这2个平台下安装的mysql-server是完全一样的。
5条评论:
https://hqidi.com/51.html
2 来自未知的用户 2020-06-04 16:14
谢谢你,问题解决了。
3 TT 2020-06-26 22:24
太感谢了,折腾了几天没想到是这样的问题
4 clumsy 2020-10-28 09:18
百度搜到的都是互相复制 啥也没说清楚 谢谢你啦
自由勇 2020-10-28 09:33
谢谢浏览和回复!:)