在MySQL升级到MariaDB 10之后,我的CloudLinux cPanel服务器上的多个站点只是白色屏幕与Error: Your PHP installation appears to be missing the MySQL extension which is required by WordPress
我可以为每个帐户选择PHP版本,但是从5.3到5.6选择任何版本仍然不能工作。
没有工作,使用/scripts/easyapache/
重建Apache和PHP不工作,并且在失败站点上运行<?php echo phpinfo(); ?>
显示没有mysql
或mysqli
扩展。
如何解决这个问题?
如果你在cPanel服务器上运行MySQL/MariaDB,这可能不需要大的重建或重新安装PHP/MySQL -如果你运行64位CloudLinux,这很可能。
它可能只是到模块的断开的符号链接。
如果你登录到WHM并搜索"MariaDB",你可能会发现一个选项"MySQL/MariaDB Upgrade"-这意味着你正在使用它。或者你可以直接问你的主机MySQL/MariaDB是否是数据库管理系统。
如果使用的是MariaDB,升级可能会破坏到mysql.so
, mysqli.so
和pdo_mysql.so
的符号链接。
只有当你通过命令行拥有root访问权限并且知道你在做什么时才尝试下面的操作——否则让你的主机来做。
在网站的根目录下创建一个名为info.php
的文件,代码如下:
<?php
$inipath = php_ini_loaded_file();
if ($inipath)
{
echo 'Loaded php.ini: ' . $inipath;
} else
{
echo "No php.ini - MariaDB symlinks are NOT the problem";
}
?>
这将为您提供导航到http://www.yoursite.com/info.php
时使用的PHP .ini文件的路径。
在我的例子中显示的是/opt/alt/php55/etc/php.ini
这是通过cPanel中的PHP选择器选择的PHP 5.5。/opt/alt/php55/
的第一部分显示了下一步我们需要查看的位置。
现在,通过命令行登录并运行:
cd /opt/alt/php55/usr/lib64/php/modules
ls -la
看一下列表,看看你是否能找到这样的:
mysql.so -> /opt/alt/php55/etc/mysql10/mysql.so
如果出现在/etc/****/mysql.so
之间的不是mariadb10
(或您正在运行的任何版本的MariaDB),那么您需要重建符号链接。
unlink mysql.so
unlink mysqli.so
unlink pdo_mysql.so
ln -s /opt/alt/php55/etc/mariadb10/mysql.so /opt/alt/php55/usr/lib64/php/modules/mysql.so
ln -s /opt/alt/php53/etc/mariadb10/mysqli.so /opt/alt/php55/usr/lib64/php/modules/mysqli.so
ln -s /opt/alt/php53/etc/mariadb10/pdo_mysql.so /opt/alt/php55/usr/lib64/php/modules/pdo_mysql.so
那么您可能需要对通过PHP选择器可用的其他PHP版本执行相同的操作。在我的例子中,还包括修复:
/opt/alt/php53/usr/lib64/php/modules
/opt/alt/php54/usr/lib64/php/modules
/opt/alt/php56/usr/lib64/php/modules
这是一个完全恐怖的故事,但很容易在最后修复(在重建和其他死胡同之后)。
cpanel论坛的讨论帮助我解决了这个问题。在我的例子中,我们最近从easyapache3迁移到easyapache4,发现ea3的自定义"suPHP_config"指令导致了这个问题。一旦它被禁用,它又工作得很好。
https://forums.cpanel.net/threads/mysql-extension-missing.554251/同样的问题,我找到了这个解决方案:
extension=mysql.so
extension=mysqli.so
extension=pdo_mysql.so
这些行应该添加到所有php.ini文件中:
/opt/alt/php44/etc/php.ini
/opt/alt/php51/etc/php.ini
/opt/alt/php52/etc/php.ini
/opt/alt/php53/etc/php.ini
/opt/alt/php54/etc/php.ini
/opt/alt/php55/etc/php.ini
/opt/alt/php55/etc/php.ini
/opt/alt/php70/etc/php.ini
我有同样的问题,但似乎不是是一个符号链接相关的问题:
root@cpanel [/opt/alt/php55/usr/lib64/php/modules]# mysql -V
mysql Ver 15.1 Distrib 10.0.24-MariaDB, for Linux (x86_64) using readline 5.1
root@cpanel [/opt/alt/php55/usr/lib64/php/modules]# pwd
/opt/alt/php55/usr/lib64/php/modules`
root@cpanel [/opt/alt/php55/usr/lib64/php/modules]# ls -la *mysql*
lrwxrwxrwx 1 root root 38 Apr 12 10:02 mysqli.so -> /opt/alt/php55/etc/mariadb10/mysqli.so
-rwxr-xr-x 1 root linksafe 264176 Mar 3 10:09 mysqlnd.so*
lrwxrwxrwx 1 root root 37 Apr 12 10:02 mysql.so -> /opt/alt/php55/etc/mariadb10/mysql.so
-rwxr-xr-x 1 root linksafe 132512 Mar 3 10:09 nd_mysqli.so*
-rwxr-xr-x 1 root linksafe 49448 Mar 3 10:09 nd_mysql.so*
-rwxr-xr-x 1 root linksafe 28704 Mar 3 10:09 nd_pdo_mysql.so*
lrwxrwxrwx 1 root root 41 Apr 12 10:02 pdo_mysql.so -> /opt/alt/php55/etc/mariadb10/pdo_mysql.so`
还有什么其他的干扰因素会导致这个问题吗?
您可能想要检查站点的第一个条目。大多数时候,如果它是一个Wordpress网站,我会首先在应用程序级别调试网站。
我首先查看。htaccess并重置那里的所有内容。所以我只留下一段wordpress代码块:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index'.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
. .如果它解决了这个问题,那么应该有一个问题,即插件粘贴不应该在那里的指令。
有时我得到相同的错误信息时,Wordfence WAF不兼容较新的php版本后,cPanel升级。