“您的PHP似乎没有安装运行WordPress所必需的MySQL扩展”的通用根治办法(多系统完整版)

王志勇 发表于 2019年10月08日 13:20

(本文的办法只限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是完全一样的。

12条评论:
1   笛声 2019-10-17 08:33
编译安装的话,可以更好的控制这些扩展组件,具体可看:
https://wordpress.stackexchange.com/questions/42098/what-are-php-extensions-and-libraries-wp-needs-and-or-uses

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
谢谢浏览和回复!:)

5   tltl 2021-03-17 10:16
CentOS Stream 8环境下,可直接yum -y install php-mysqlnd. 不需要先卸载php7.2.24
6   镜花水月 2022-04-07 14:55
我的安装完还是不行啊
7   镜花水月 2022-04-07 14:59
我的liunx是centeros7.9,PnP是7.4.0、Apache是2.4.6.
PHP的安装:wget http://php.net/distributions/php-7.4.0.tar.gz
这个是官网的。
yum -y install mariadb-server php-mysql
安装完,从启appche 和mariadb,这个错误依然存在。
大佬能给再指点下不。

自由勇 2022-04-09 07:41
我最近太忙,每天忙个不停,由于时间的关系,无法尝试调试。建议请把本文,再浏览一遍,然后对照本文的步骤(我现在也需要重新对照),因为我当时已经花了相当多的时间去探索这个问题,并记录在本文,里面还记录了一些细节,比如除了需要重启Apache,也必须重启MySQL。(当时写的这一篇,现在也忘得差不多了。)

出现这个问题,前天我想了一段时间,初步认为问题极可能是出现在你安装PHP时,是用编译安装的PHP 7.4,而WordPress,是挑MySQL版本的,所以会出现如标题的这个报错。

我写本文、调试的过程,是用命令+第三方软件平台安装的PHP 7.4。

正好我没有使用编译安装过PHP。

CentOS下,建议使用第三方软件源remi安装PHP 7.4,请见本文的“PHP 7.X下出现这个报错”这部分,里面有PHP 7.4的安装命令。

如果一定需要编译安装PHP 7.4,也可以参照本文的“PHP 7.X下出现这个报错”这部分,这部分有我对CentOS下的PHP 7.X的一些重要发现,比如:

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,标题的报错会解决。

8   宋鑫 2023-07-07 00:46
学到太多,谢谢大佬

自由勇 2023-07-08 12:55
谢谢支持!

9   1 2023-08-02 14:24
xiexie

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写