I've got a rather tricky problem with my webserver since I performed a regular package update last Friday. I'm getting an error when using mysql_connect().
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50532 Library:100005 in /srv/www/***/wp-includes/wp-db.php on line 1142
When I run php -i I get:
mysqli
MysqlI Support => enabled
Client API library version => 10.0.5-MariaDB
Client API header version => 5.5.32
apt-get install mariadb*
Results in the following packages already installed:
libmariadbclient18 is already the newest version.
libmariadbclient18 set to manually installed.
mariadb-client is already the newest version.
mariadb-client-10.0 is already the newest version.
mariadb-client-10.0 set to manually installed.
mariadb-client-core-10.0 is already the newest version.
mariadb-client-core-10.0 set to manually installed.
mariadb-common is already the newest version.
mariadb-common set to manually installed.
mariadb-server is already the newest version.
mariadb-server-10.0 is already the newest version.
mariadb-server-10.0 set to manually installed.
mariadb-server-core-10.0 is already the newest version.
mariadb-server-core-10.0 set to manually installed.
I've already looked up this issue all over the web, but none of the similar issues seem to have the -MariaDB tag with the library version.
So I've no idea how I can resolve this.
Your help is greatly appreciated!
edit:
php -i mysql:
MySQL Support => enabled
Client API version => 10.0.5-MariaDB
Oddly enought there is no mention of a Client API library version or
Client API header version in this section.
Enable the mysqlnd, nd_mysql, and nd_mysqli extentions for PHP, and disable mysql and mysqli if they are enabled (PHP 5.5).
Late response, but this is high in the search results and this is the solution that worked for me, as someone who did not have admin access to the server.
Install the mysqlnd package for PHP and the warning should go away.
For Debian/Ubuntu based systems, this would be:
sudo apt install php-mysqlnd
or
sudo apt install php7.0-mysqlnd
Restart your server daemons after installing (apache, nginx, and/or php-fpm)
Related
In PHP I'm getting the following warning whenever I try to connect to a database (via mysql_connect)
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50162 Library:50524
In my php -i output I have the following values listed under mysqli
Client API library version => 5.5.24
Client API header version => 5.1.62
I've tried updating php5-mysql and php but I'm already at the latest version of both of them. How do I go about updating the header version so I stop seeing this warning?
EDIT
My MySQL files should all be updated to be the latest version:
$ 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.
Removing old versions
$ 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
I am using MariaDB and have a similar problem.
From MariaDB site, it is recommended to fix it by
Switch to using the mysqlnd driver in PHP (Recommended solution).
Recompile PHP with the MariaDB client libraries.
Use your original MySQL client library with the MariaDB.
My problem was fixed by using the mysqlnd driver in Ubuntu:
sudo apt-get install php5-mysqlnd
[update: extra information] Installing this driver also resolve PDO problem that returns integer value as a string. To keep the type as integer, after installing mysqlInd, do this
$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);
For new MySQL 5.6 family you need to install php5-mysqlnd, not php5-mysql.
Remove this version of the mysql driver
sudo apt-get remove php5-mysql
And install this instead
sudo apt-get install php5-mysqlnd
Your PHP was compiled with MySQL 5.1 but now it is linking a mysql library of 5.5.X family.
You have to upgrade PHP to a version compiled with MySQL 5.5 or revert back mysql client libraries to 5.1.x.
The same works for MySQL:
sudo apt-get install php5-mysqlnd
I've read this thread trying to find the solution for MySQL, and I've also seen ken's answer, but I ignored the solution for MariaDB, wasting a few hours that way. It wasn't clear for me that the same may apply to MySQL. This post is just to spare you the few hours I lost.
The root reason for this error is that PHP separated itself from the MySQL Client libraries some time ago. So what's happening (mainly on older compiles of linux) is that people will compile PHP against a given build of the MySQL Client (meaning the version of MySQL installed is irrelevant) and not upgrade (in CentOS this package is listed as mysqlclientXX, where XX represents the package number). This also allows the package maintainer to support lower versions of MySQL. It's a messy way to do it, but it was the only way given how PHP and MySQL use different licensing.
MySQLND solves the problem by using PHP's own native driver (the ND), which no longer relies on MySQL Client. It's also compiled for the version of PHP you're using. This is a better solution all around, if for no other reason that MySQLND is made to have PHP talk to MySQL.
If you can't install MySQLND you can actually safely ignore this error for the most part. It's just more of an FYI notice than anything. It just sounds scary.
My hosting company told me to fix this by deactivating "mysqli" and activating "nd_mysqli" in the php extensions.
The error is gone, but I don't have the knowledge to understand if this is the right method to fix this.
To compile php from source with MySQL native driver (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
From /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
One or more PHP MySQL extensions can be included by using these options.
If a value is not passed to these options, or if the value is mysqlnd, MySQL native driver will be used.
I got same php warring in my wordpress site...
Err: Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50547 Library:50628 in /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php on line 1515
Cause: I updated wp 4.2 to 4.5 version (PHP and MySql mismatch )
I changed wp-db.php on line 1515
$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
to
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 );
}
Its got without warring err on my wordpress site
If u had access cpanel or whm for domain web hosting ...
In cPanel, Go to "Softwares and services" tab, >> and then click "Select PHP Version" >> set your desired version of php...
Eg.
Current PHP version:
PHP Version [5.2] ( list of 5.2, 5.3, 5.4, 5.5, 5.6 available php versions)
Warning: Changing php modules and php options via PHP Selector for native php version is impossible
I selected 5.6 php version, after that error cleared on my wordpress blog site...
Warning: mysqli::mysqli(): Headers and client library minor version mismatch.
Headers:50547 Library:100026
I solved the above error by just rebuilding my Apache:
cPanel Version 56.0 (build 25)
Apache Version 2.4.18
PHP Version 5.5.30
MySQL Version 10.0.26-MariaDB
For WHM and cPanel, some versions need to explicty set mysqli to build.
Using WHM, under CENTOS 6.9 xen pv [dc] v68.0.27, one needed to rebuild Apache/PHP by looking at all options and select mysqli to build. The default was to build the deprecated mysql. Now the depreciation messages are gone and one is ready for future MySQL upgrades.
I ran into the same issue on centos7. Removing php-mysql and installing php-mysqlnd fixed the problem. Thanks Carlos Buenosvinos Zamora for your suggestion.
Here are my commands on centos7 just in case this can be of help to anybody as most of the answers here are based on Debian/Ubuntu.
To find the installed php-mysql package
yum list installed | grep mysql
To remove the installed php-mysql package
yum remove php55w-mysql.x86_64
To install php-mysqlnd
yum install php-mysqlnd.x86_64
Works for MariaDB 10.6.4-MariaDB, php56w, on centos 7.7
yum remove php56w-mysqli
yum install php56w-mysqlnd
Changing PHP version from 5.6 to 5.5 Fixed it.
You have to go to control panel > CGI Script and change PHP version there.
I have already done much digging on installing/enabling PDO mysql extension on stackoverflow and many other sites, so please do not consider this as a duplicate question
I am on centos 6.5 and has php 5.5.26 which was compiled with make, make install (I know this is an older version so please do not close question or suggest updating to new php version. Also cannot install php using yum as this is what has been installed already me and should not be installed/changed).
So when I did compile php and added it to apache, it does not show mysql PDO driver. I tried putting extension=pdo_mysql.so to ini file with no success (yes I did restart the server as well, after making changes).
It shows pdo enabled, but only for drivers pgsql and sqlite.
Also, tried installing php-mysql package using yum. But the issue with yum installation is it installs 5.3.3 version of driver which complains about compatibility issues as my php version is 5.5.26.
So I am not sure what I need to do install pdo mysql extension
#Peter Darmis was right from his comments.
PHP 5.3.3 was not completely uninstalled, don't know why.
There was already a PHP installed manually be compilation and, as I wasn't aware about this, I was using yum for installation of modules and at that time PHP 5.3.3 got installed which I don't know why it dot un-install properly.
So I ended up with 2 PHP versions, so uninstalled PHP 5.3.3 completely using yum and then resolved this issue compiling PHP with pdo options
I got such warning :
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50537 Library:50617
when try to upload my code to my remote server, and my remote server currently using php 5.5
, It's because the mysql extension has been already deprecated so that i have to change the extension to mysqli?
but in my local server, i tested in php 5.5 too and it works as normal
what would be the issue here?
If you are running ubuntu/debian.
apt-cache search php5-mysqlnd
Find one that fits:
apt-get install php5-mysqlnd
I think your issue is this:
After having MySQL 5.6.17 published, some users complained about a
warning thrown by their PHP applications :
PHP Warning: mysql_connect(): Headers and client library minor version
mismatch. Headers:50535 Library:50617
In fact, this could happen with any application linked to
libmysqlclient18 in a certain version (php5-mysql from Dotdeb is
linked to the 5.5.35 version from the stock Debian distribution) when
connecting to a MySQL server in another version (5.6.17 in our case).
The warning is thrown by libmysqlclient18 itself. And this is just a
warning, there is no reason why any bad behavior would happen in that
case.
Of course, I could build php5-mysql against the latest
libmysqlclient18 (5.6.17), but it would lead to very bad issues, such
as duplicate symbols or segfaults when PHP is loaded with other
MySQL-linked modules from the stock Debian distribution (those are
linked to libmysqlclient18 5.5.35). For example : mod_php5 + Apache +
mod_auth_mysql would crash.
If this this warning really annoys you, feel free to install
php5-mysqlnd instead of php5-mysql :
it’s a drop-in replacement
it’s not linked against any libmysqlclient library
it won’t throw any irrelevant warning about version mismatch
it has a lot of benefits. See http://www.php.net/mysqlnd for more info
I hope this helps.
In PHP I'm getting the following warning whenever I try to connect to a database (via mysql_connect)
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50162 Library:50524
In my php -i output I have the following values listed under mysqli
Client API library version => 5.5.24
Client API header version => 5.1.62
I've tried updating php5-mysql and php but I'm already at the latest version of both of them. How do I go about updating the header version so I stop seeing this warning?
EDIT
My MySQL files should all be updated to be the latest version:
$ 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.
Removing old versions
$ 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
I am using MariaDB and have a similar problem.
From MariaDB site, it is recommended to fix it by
Switch to using the mysqlnd driver in PHP (Recommended solution).
Recompile PHP with the MariaDB client libraries.
Use your original MySQL client library with the MariaDB.
My problem was fixed by using the mysqlnd driver in Ubuntu:
sudo apt-get install php5-mysqlnd
[update: extra information] Installing this driver also resolve PDO problem that returns integer value as a string. To keep the type as integer, after installing mysqlInd, do this
$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);
For new MySQL 5.6 family you need to install php5-mysqlnd, not php5-mysql.
Remove this version of the mysql driver
sudo apt-get remove php5-mysql
And install this instead
sudo apt-get install php5-mysqlnd
Your PHP was compiled with MySQL 5.1 but now it is linking a mysql library of 5.5.X family.
You have to upgrade PHP to a version compiled with MySQL 5.5 or revert back mysql client libraries to 5.1.x.
The same works for MySQL:
sudo apt-get install php5-mysqlnd
I've read this thread trying to find the solution for MySQL, and I've also seen ken's answer, but I ignored the solution for MariaDB, wasting a few hours that way. It wasn't clear for me that the same may apply to MySQL. This post is just to spare you the few hours I lost.
The root reason for this error is that PHP separated itself from the MySQL Client libraries some time ago. So what's happening (mainly on older compiles of linux) is that people will compile PHP against a given build of the MySQL Client (meaning the version of MySQL installed is irrelevant) and not upgrade (in CentOS this package is listed as mysqlclientXX, where XX represents the package number). This also allows the package maintainer to support lower versions of MySQL. It's a messy way to do it, but it was the only way given how PHP and MySQL use different licensing.
MySQLND solves the problem by using PHP's own native driver (the ND), which no longer relies on MySQL Client. It's also compiled for the version of PHP you're using. This is a better solution all around, if for no other reason that MySQLND is made to have PHP talk to MySQL.
If you can't install MySQLND you can actually safely ignore this error for the most part. It's just more of an FYI notice than anything. It just sounds scary.
My hosting company told me to fix this by deactivating "mysqli" and activating "nd_mysqli" in the php extensions.
The error is gone, but I don't have the knowledge to understand if this is the right method to fix this.
To compile php from source with MySQL native driver (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
From /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
One or more PHP MySQL extensions can be included by using these options.
If a value is not passed to these options, or if the value is mysqlnd, MySQL native driver will be used.
I got same php warring in my wordpress site...
Err: Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50547 Library:50628 in /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php on line 1515
Cause: I updated wp 4.2 to 4.5 version (PHP and MySql mismatch )
I changed wp-db.php on line 1515
$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
to
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 );
}
Its got without warring err on my wordpress site
If u had access cpanel or whm for domain web hosting ...
In cPanel, Go to "Softwares and services" tab, >> and then click "Select PHP Version" >> set your desired version of php...
Eg.
Current PHP version:
PHP Version [5.2] ( list of 5.2, 5.3, 5.4, 5.5, 5.6 available php versions)
Warning: Changing php modules and php options via PHP Selector for native php version is impossible
I selected 5.6 php version, after that error cleared on my wordpress blog site...
Warning: mysqli::mysqli(): Headers and client library minor version mismatch.
Headers:50547 Library:100026
I solved the above error by just rebuilding my Apache:
cPanel Version 56.0 (build 25)
Apache Version 2.4.18
PHP Version 5.5.30
MySQL Version 10.0.26-MariaDB
For WHM and cPanel, some versions need to explicty set mysqli to build.
Using WHM, under CENTOS 6.9 xen pv [dc] v68.0.27, one needed to rebuild Apache/PHP by looking at all options and select mysqli to build. The default was to build the deprecated mysql. Now the depreciation messages are gone and one is ready for future MySQL upgrades.
I ran into the same issue on centos7. Removing php-mysql and installing php-mysqlnd fixed the problem. Thanks Carlos Buenosvinos Zamora for your suggestion.
Here are my commands on centos7 just in case this can be of help to anybody as most of the answers here are based on Debian/Ubuntu.
To find the installed php-mysql package
yum list installed | grep mysql
To remove the installed php-mysql package
yum remove php55w-mysql.x86_64
To install php-mysqlnd
yum install php-mysqlnd.x86_64
Works for MariaDB 10.6.4-MariaDB, php56w, on centos 7.7
yum remove php56w-mysqli
yum install php56w-mysqlnd
Changing PHP version from 5.6 to 5.5 Fixed it.
You have to go to control panel > CGI Script and change PHP version there.
I've recently upgraded MySQL on my Debian 5.0.4 server to 5.1. Now phpMyAdmin shows the following warning:
Your PHP MySQL library version 5.0.51a differs from your MySQL server version 5.1.43
Is it likely to cause any problems?
The message indicates that :
You are using version 5.1.43 of MySQL server
But that the library that's used by PHP to communicate with that server has been compiled to communicate with a version 5.0.x of MySQL.
In theory, this should not cause any real problem : minor versions tend to be compatible ; but you might need to update the library that's used by PHP ; maybe some package like "libmysql", or something like that (I don't have a Debian machine)
If you want to make that warning disappear (even if I'm not sure it could really cause any big problem), you'll have to update the PHP component that is used to communicate with MySQL.
Note : With the dependancies, it might not be that easy, actually, to upgrade just one package...
I would say that you'd have to update something like php5-mysql ; which means :
apt-get install php5-mysql
(According to this page -- amongst others -- to update a single package, your must use install)
If you are using aptitude, and not apt-get... Not sure about the right option that you should use to update only one package ; still, aptitude safe-upgrade should present you with a list of packages it will upgrade, which will allow you to decide whether or not you wish to continue...
But you said in a comment to another answer that Debian ships by default with MySQL 5.0 -- which means the "official" module for PHP is probably compiled against libmysql 5.0, and not libmysql 5.1.
To solve that problem, you'll have to either :
Find a repository that provides PHP (or, at least, the mysql extension) compiled against libmysql 5.1
Or re-compile PHP and/or the mysql extension against the version of libmysql that's currently used on your system -- i.e. libmysql 5.1
Try running sudo apt-get update mysql-client.
I was seeing this in the phpMyAdmin console - I run Debian 8 on Google cloud and recently upgraded to mysql 5.7.21. I had to run the PHP NativeDriver to get this to subside
sudo apt-get update
sudo apt-get install php5-mysqlnd
So you basically have php-mysql and php-mysqlnd drivers...
On CentOS 7, I made version error go away by:
yum remove php-mysql.x86_64
yum install php-mysqlnd.x86_64
Note that removing php-mysql also removed phpMyAdmin, but I installed it again without any problems.
Error related to lib versions is gone now, but not sure if phpMyAdmin just doesn't check versions of drivers for the mysqlnd version or the php-mysqlnd is just more compatible.
In Debian/Ubuntu you can overcome that notification by using the following command in the latest repository defined in /etc/apt/sources.list.
sudo apt-get upgrade mysql-client
That will solve your problem perfectly.
Have a great day.
sudo apt-get update php5-mysql