【问题标题】:Headers and client library minor version mismatch标头和客户端库次要版本不匹配
【发布时间】:2012-06-01 07:50:11
【问题描述】:

在 PHP 中,每当我尝试连接到数据库时都会收到以下警告(通过 mysql_connect

警告:mysql_connect():标头和客户端库次要版本不匹配。标头:50162 库:50524

在我的php -i 输出中,mysqli 下列出了以下值

客户端 API 库版本 => 5.5.24

客户端 API 标头版本 => 5.1.62

我已经尝试更新 php5-mysql php,但我已经使用了它们的最新版本。如何更新标头版本以便不再看到此警告?

编辑

我的 MySQL 文件应该全部更新为最新版本:

$ apt-get install mysql.*5.5
. . .
mysql-client-5.5 is already the newest version.
mysql-server-core-5.5 is already the newest version.
mysql-server-5.5 is already the newest version.
mysql-testsuite-5.5 is already the newest version.
mysql-source-5.5 is already the newest version.

删除旧版本

$ apt-get remove mysql.*5.1
. . .
Package handlersocket-mysql-5.1 is not installed, so not removed
Package mysql-cluster-client-5.1 is not installed, so not removed
Package mysql-cluster-server-5.1 is not installed, so not removed
Package mysql-client-5.1 is not installed, so not removed
Package mysql-client-core-5.1 is not installed, so not removed
Package mysql-server-5.1 is not installed, so not removed
Package mysql-server-core-5.1 is not installed, so not removed
Package mysql-source-5.1 is not installed, so not removed

【问题讨论】:

  • 你还必须更新 mysql 的东西。 mysql-client 之类的。
  • @MarcB 我应该拥有所有最新版本的 MySQL 套件(请参阅我的最新编辑)
  • “客户端 API 标头”版本无法升级,因为它被硬编码到 PHP 可执行文件中。它们是编译 PHP 时安装在 PHP 软件包维护者系统上的 mysql 头文件(和库)。您无法升级它们。您必须故障回复到 MySQL 5.1.X 库以使该版本的 PHP 再次运行,或者将 PHP 升级到使用 MySQL 5.5.X 编译的版本。
  • @dAm2K 事实证明,版本可以通过将我当前的 mysqli.so 文件换成较新的文件来升级。
  • 我真的不知道是否有办法检查 ABI 兼容性......你只需要检查 apache error_log 是否有奇怪的 httpd 子错误。如果 3-4 天后错误没有出现,你应该没问题。

标签: php ubuntu mysqli warnings


【解决方案1】:

我正在使用 MariaDB 并且遇到了类似的问题。

来自MariaDB site,建议修复

  1. 改用 PHP 中的 mysqlnd 驱动(推荐解决方案)。
  2. 使用 MariaDB 客户端库重新编译 PHP。
  3. 将您的原始 MySQL 客户端库与 MariaDB 结合使用。

在 Ubuntu 中使用 mysqlnd 驱动程序解决了我的问题:

sudo apt-get install php5-mysqlnd

[更新:额外信息] 安装此驱动程序还解决了将整数值作为字符串返回的 PDO 问题。要将类型保持为整数,请在安装 mysqlInd 后执行此操作

$db = new PDO('mysql:host='.$host.';dbname='.$db_name, $user, $pass, 
          array( PDO::ATTR_PERSISTENT => true));
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

【讨论】:

  • php5-mysqlnd 驱动工作,但答案应该注意,需要重启 apache2ctl
【解决方案2】:

对于新的 MySQL 5.6 系列,您需要安装 php5-mysqlnd,而不是 php5-mysql。

删除这个版本的mysql驱动

sudo apt-get remove php5-mysql

然后安装它

sudo apt-get install php5-mysqlnd

【讨论】:

  • 请解释一下你的答案。类似于这些包的作用。
  • 对于新的 MySQL 5.6 系列,您需要安装 php5-mysqlnd,而不是 php5-mysql。
  • 它解决了这个问题。当我将 MySql(AWS RDS MySql 实例)从 5.5 升级到 5.6 时,我遇到了这个问题。
  • 显然需要重新启动 Apache 才能正常工作。只是指出显而易见的
  • 这破坏了我的 phpMyAdmin。似乎 phpMyAdmin 无法与 MySQL 本机驱动程序一起使用。
【解决方案3】:

您的 PHP 是用 MySQL 5.1 编译的,但现在它正在链接 5.5.X 系列的 mysql 库。 您必须将 PHP 升级到使用 MySQL 5.5 编译的版本或将 mysql 客户端库恢复到 5.1.x。

【讨论】:

  • 基本上这是我遇到的问题,但我没有升级或降级任何东西,而是能够从使用 MySQL 5.5 编译的 PHP 的服务器中提取 mysqli.so 文件并将其粘贴在我的/usr/lib/php5/ 目录。但是,我不确定这是最安全的路线,因此我不想将其用作首选答案。感谢您的帮助。
【解决方案4】:

同样适用于 MySQL:

sudo apt-get install php5-mysqlnd

我读过这个帖子试图找到 MySQL 的解决方案,我也看到了 ken 的答案,但我忽略了 MariaDB 的解决方案,这样浪费了几个小时。我不清楚这是否适用于 MySQL。这篇文章只是为了让你节省我失去的几个小时。

【讨论】:

  • 对我来说很好,然后是 sudo systemctl restart mysql sudo systemctl restart apache2
  • 最好是安装并让依赖项删除php5-mysql。一些系统不喜欢在没有替代方案的情况下清除 php5-mysql。
【解决方案5】:

这个错误的根本原因是 PHP 前段时间将自己从 MySQL 客户端库中分离出来。所以发生的事情(主要是在较旧的 linux 编译上)是人们将针对 MySQL 客户端的给定构建 编译 PHP(意味着安装的 MySQL 版本无关)而不是升级(在 CentOS 中这个包列为mysqlclientXX,其中XX 表示包号)。这也允许包维护者支持较低版本的 MySQL。这是一种混乱的方式,但考虑到 PHP 和 MySQL 如何使用不同的许可,这是唯一的方式。

MySQLND 使用 PHP 自己的本地驱动程序(ND)解决了这个问题,它不再依赖于 MySQL 客户端。它还针对您正在使用的 PHP 版本进行编译。这是一个更好的解决方案,如果没有其他原因让 MySQLND 让 PHP 与 MySQL 对话。

如果您无法安装 MySQLND,您实际上可以在大多数情况下安全地忽略此错误。这只是一个仅供参考的通知,而不是任何东西。听起来很吓人。

【讨论】:

    【解决方案6】:

    使用MySQL native driver (mysqlnd)从源代码编译php,

    cd /php/source/path
    ./configure <other-options> --with-mysql --with-mysqli --with-pdo-mysql
    make clean    # required if there was a previous make, which could cause various errors during make
    make
    make install
    

    来自/php/source/path/configure --help

    --with-mysql=DIR        Include MySQL support.  DIR is the MySQL base
                          directory, if no DIR is passed or the value is
                          mysqlnd the MySQL native driver will be used
    --with-mysqli=FILE      Include MySQLi support.  FILE is the path
                          to mysql_config.  If no value or mysqlnd is passed
                          as FILE, the MySQL native driver will be used
    --with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory
                          If no value or mysqlnd is passed as DIR, the
                          MySQL native driver will be used
    

    使用这些选项可以包含一个或多个 PHP MySQL 扩展。
    如果没有将值传递给这些选项,或者该值为mysqlnd,则将使用 MySQL 本机驱动程序。

    【讨论】:

    • 您的回答对我来说非常有价值。在其中,我读到我必须同时使用--with-mysql--with-mysqli 选项才能正确使用已编译的驱动程序。所以这次我再次执行了我的配置命令:` --with-mysql=/home/stephane/programs/mariadb/install \ --with-mysqli=/home/stephane/programs/mariadb/install/bin/mysql_config `问题就解决了。它现在使用正确的 MariaDB 客户端版本。
    【解决方案7】:

    我在我的 wordpress 网站中遇到了相同的 php 争吵...

    错误:警告:mysql_connect():标头和客户端库次要版本不匹配。标题:50547 库:50628 位于 /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php 第 1515 行

    原因:我将 wp 4.2 更新到 4.5 版本(PHP 和 MySql 不匹配)

    我在第 1515 行更改了 wp-db.php

    $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
    

    if ( WP_DEBUG ) {
        $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
    } else {
        $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
    }
    

    在我的 wordpress 网站上没有任何错误

    【讨论】:

    【解决方案8】:

    如果您可以访问 cpanel 或 whm 以进行域网络托管...

    在cPanel中,转到“软件和服务”选项卡,>>然后点击“选择PHP版本”>>设​​置您想要的php版本...

    例如。 当前 PHP 版本:

    PHP 版本 [5.2](5.2、5.3、5.4、5.5、5.6 可用 php 版本列表)

    警告:无法通过 PHP Selector 更改原生 php 版本的 php 模块和 php 选项

    我选择了 5.6 php 版本,在我的 wordpress 博客网站上清除了该错误之后...

    【讨论】:

      【解决方案9】:
      Warning: mysqli::mysqli(): Headers and client library minor version mismatch.
      Headers:50547 Library:100026
      

      我通过重建我的 Apache 解决了上述错误:

      cPanel Version  56.0 (build 25)
      Apache Version  2.4.18
      PHP Version 5.5.30
      MySQL Version   10.0.26-MariaDB
      

      【讨论】:

        【解决方案10】:

        我在使用 Percona/MySQL 5.6 时遇到这个问题,并且 php 驱动程序是用 5.5 编译的,并且某些应用程序需要 php5-mysql,所以我编写了一个脚本来重建驱动程序。

        https://github.com/falcacibar/php5-mysql-rebuild

        【讨论】:

          【解决方案11】:

          对于WHM和cPanel,部分版本需要显式设置mysqli才能构建。

          使用 WHM,在 CENTOS 6.9 xen pv [dc] v68.0.27 下,需要通过查看所有选项并选择 mysqli 来重建 Apache/PHP。默认是构建已弃用的 mysql。现在折旧消息已经消失,可以为将来的 MySQL 升级做好准备。

          【讨论】:

            【解决方案12】:

            我在 centos7 上遇到了同样的问题。删除 php-mysql 并安装 php-mysqlnd 解决了这个问题。感谢 Carlos Buenosvinos Zamora 的建议。

            这是我在 centos7 上的命令,以防万一这对任何人都有帮助,因为这里的大多数答案都是基于 Debian/Ubuntu。

            查找已安装的php-mysql包

            yum list installed | grep mysql
            

            删除已安装的 php-mysql 包

            yum remove php55w-mysql.x86_64
            

            安装 php-mysqlnd

            yum install php-mysqlnd.x86_64
            

            【讨论】:

              【解决方案13】:

              我的托管公司告诉我通过停用“mysqli”并在 php 扩展中激活“nd_mysqli”来解决此问题。

              错误消失了,但我不知道这是否是解决此问题的正确方法。

              【讨论】:

                【解决方案14】:

                适用于 MariaDB 10.6.4-MariaDBphp56wcentos 7.7

                1. yum remove php56w-mysqli
                2. yum install php56w-mysqlnd

                【讨论】:

                  【解决方案15】:

                  将 PHP 版本从 5.6 更改为 5.5 已修复此问题

                  你必须去控制面板 > CGI 脚本并在那里更改 PHP 版本。

                  【讨论】:

                  • 我们都在努力升级到最新版本,而不是在版本中退缩。
                  猜你喜欢
                  • 1970-01-01
                  • 2013-11-23
                  • 2013-10-18
                  • 2018-02-14
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-02-03
                  相关资源
                  最近更新 更多