“您的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.1的自带源是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是完全一样的。

1条评论:
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

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

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

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

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

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

Blog存档 Archives

2019年09月
2019年08月
2019年07月
2019年06月
2019年05月
2019年04月(30)
2019年03月(30)
2019年02月(30)
2019年01月(30)
2018年12月(30)
2018年11月(30)
2018年10月(30)
2018年09月(17)
2016年-2017年(9)
2014年06月-09月(10)
2013年 +

2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2019 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue