Несоответствие минорной версии заголовков и клиентской библиотеки


83

В 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 или что-то еще.
Marc B

@MarcB У меня должны быть все последние версии пакета MySQL (см. Мое последнее изменение)
Ян Хантер,

1
Версия «Заголовок клиентского API» не может быть обновлена, поскольку она жестко встроена в исполняемый файл PHP. Это были заголовки mysql (и библиотеки), установленные в системе менеджера пакетов PHP во время компиляции PHP. Вы не можете их обновить. Вам нужно вернуться к библиотекам MySQL 5.1.X, чтобы эта версия PHP снова заработала, или обновить PHP до версии, скомпилированной с MySQL 5.5.X.
dAm2K

@ dAm2K Как оказались версия была в состоянии быть модернизировано путем замены моего текущего файла mysqli.so с новым.
Ян Хантер,

1
Я действительно не знаю, есть ли способ проверить совместимость ABI ... вам просто нужно проверить apache error_log на предмет странных дочерних ошибок httpd. Если через 3-4 дня ошибка не появится, все в порядке.
dAm2K

Ответы:


31

Ваш PHP был скомпилирован с MySQL 5.1, но теперь он связывает библиотеку mysql семейства 5.5.X. Вам необходимо обновить PHP до версии, скомпилированной с MySQL 5.5, или вернуть клиентские библиотеки mysql к версии 5.1.x.


1
В основном это была проблема, с которой я столкнулся, но вместо того, чтобы обновлять или понижать что-либо, я смог вытащить файл mysqli.so с сервера с PHP, скомпилированным с MySQL 5.5, и просто вставить его в свой каталог / usr / lib / php5 / . Однако я не уверен, что это самый безопасный путь, поэтому я не хочу использовать его в качестве основного ответа. Спасибо за вашу помощь.
Ян Хантер

128

Я использую MariaDB и имею аналогичную проблему.

С сайта MariaDB рекомендуется исправить с помощью

  1. Переключитесь на использование драйвера mysqlnd в PHP (рекомендуемое решение).
  2. Запустите с более низким уровнем сообщения об ошибках:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. Перекомпилируйте PHP с клиентскими библиотеками MariaDB.
  4. Используйте вашу исходную клиентскую библиотеку MySQL с MariaDB.

Моя проблема исправлена ​​с помощью драйвера mysqlnd в Ubuntu:

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);

4
Это должно быть ответом, так как это работает и с mysql
Джастин Э

1
Это решило мою проблему с несовпадением mysql и php в Ubuntu. Благодаря!
jamescampbell 08

1
спасибо, это работает для mysql cluster 7.30. Я очень доволен этим: D
haidarvm 02 авг.15,

отключение отчетов об ошибках. это лучшее решение. : D
MaXi32 04

2
mysqlnd с maria db и php7 отлично работает, спасибо за ответ!
Ricardo BRGWeb,

69

Для нового семейства MySQL 5.6 вам необходимо установить php5-mysqlnd, а не php5-mysql.

Удалите эту версию драйвера mysql

sudo apt-get remove php5-mysql

И установите это вместо

sudo apt-get install php5-mysqlnd

9
Пожалуйста, поясните свой ответ. Такие вещи, как эти пакеты.
Machavity

4
Для нового семейства MySQL 5.6 вам необходимо установить php5-mysqlnd, а не php5-mysql.
Карлос Буэносвинос Замора

Это решило проблему. Я столкнулся с этой проблемой, когда обновил MySql (AWS RDS MySql Instance) с 5.5 до 5.6.
Рахул Прасад,

3
Очевидно, что для правильной работы необходим перезапуск Apache. Просто указываю на очевидное
Метафаниэль

1
Это сломало мой phpMyAdmin. Кажется, что phpMyAdmin не может работать с собственным драйвером MySQL.
Эхсан,

23

То же самое и с MySQL:

sudo apt-get install php5-mysqlnd

Я читал эту ветку, пытаясь найти решение для MySQL, и я также видел ответ Кена, но я проигнорировал решение для MariaDB, потратив на это несколько часов. Мне было непонятно, может ли то же самое относиться к MySQL. Этот пост просто для того, чтобы сэкономить вам несколько часов, которые я потерял.


хорошее исправление для меня, за которым следует sudo systemctl restart mysql sudo systemctl restart apache2
Пол

Гораздо лучше выполнить установку и позволить зависимостям удалить php5-mysql. Некоторым системам не нравится чистка php5-mysql без альтернативы.
Руи Ф Рибейро

11

Основная причина этой ошибки в том, что некоторое время назад PHP отделился от клиентских библиотек MySQL. Итак, что происходит (в основном на старых компиляциях linux), люди будут компилировать PHP для данной сборки клиента MySQL (это означает, что установленная версия MySQL не имеет значения), а не обновлять (в CentOS этот пакет указан как mysqlclientXX, где XXпредставляет номер пакета). Это также позволяет сопровождающему пакета поддерживать более низкие версии MySQL. Это запутанный способ сделать это, но это был единственный способ, учитывая, что PHP и MySQL используют разные лицензии.

MySQLND решает проблему, используя собственный собственный драйвер PHP (ND), который больше не зависит от клиента MySQL. Он также скомпилирован для используемой вами версии PHP. Это лучшее решение во всех отношениях, если только по той причине, что MySQLND создан для взаимодействия PHP с MySQL.

Если вы не можете установить MySQLND, вы можете игнорировать эту ошибку по большей части. Это больше похоже на уведомление, чем на что-либо. Звучит просто страшно.


2

Чтобы скомпилировать php из исходного кода с собственным драйвером MySQL (mysqlnd) ,

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опции, чтобы правильно использовать скомпилированный драйвер. Итак, на этот раз я снова выполнил свою команду configure: `--with-mysql = / home / stephane / programs / mariadb / install \ --with-mysqli = / home / stephane / programs / mariadb / install / bin / mysql_config` и проблема была решена. Теперь он использует правильную версию клиента MariaDB.
Стефан

1

У меня такой же конфликт php на моем сайте wordpress ...

Ошибка: Предупреждение: mysql_connect (): Несоответствие заголовков и минорной версии клиентской библиотеки. Заголовки: 50547 Библиотека: 50628 в /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php в строке 1515

Причина: я обновил версию wp 4.2 до версии 4.5 (несовпадение PHP и MySql)

Я изменил wp-db.php в строке 1515

$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 есть без ошибок


К вашему сведению, это перестанет работать под PHP7, потому что функции mysql_ были удалены
Machavity

1

Если бы у вас был доступ к cpanel или whm для веб-хостинга домена ...

В cPanel перейдите на вкладку «Программное обеспечение и услуги», >> и затем нажмите «Выбрать версию PHP» >> установите желаемую версию php ...

Предупреждение: mysql_connect (): несоответствие заголовков и минорной версии клиентской библиотеки.  Заголовки: 50547 Библиотека: 50628 на сайте chennaitechnologies.com

Например. Текущая версия PHP:

Версия PHP [5.2] (список доступных версий PHP 5.2, 5.3, 5.4, 5.5, 5.6)

Предупреждение: изменение модулей php и параметров php через PHP Selector для нативной версии php невозможно.

Я выбрал версию 5.6 php, после того как эта ошибка исчезла на моем сайте блога wordpress ...


1
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


0

Для WHM и cPanel в некоторых версиях необходимо явно указать mysqli для сборки.

Используя WHM в CENTOS 6.9 xen pv [dc] v68.0.27, нужно было пересобрать Apache / PHP, просмотрев все параметры и выбрав mysqli для сборки. По умолчанию был создан устаревший mysql. Теперь сообщения об амортизации исчезли, и одно готово для будущих обновлений MySQL.


0

Я столкнулся с той же проблемой на centos7. Удаление php-mysql и установка php-mysqlnd устранили проблему. Спасибо Карлосу Буэносвиносу Заморе за ваше предложение.

Вот мои команды на 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

0

Моя хостинговая компания посоветовала мне исправить это, отключив mysqli и активировав nd_mysqli в расширениях php.

Ошибка исчезла, но у меня нет знаний, чтобы понять, правильный ли это способ исправить это.


-1

Изменение версии PHP с 5.6 на 5.5 Исправлено .

Вам нужно перейти в панель управления> CGI Script и изменить версию PHP там.


Мы все пытаемся перейти на последнюю версию, не возвращаясь к предыдущим версиям.
karmafunk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.