헤더 및 클라이언트 라이브러리 부 버전 불일치


82

나는 (를 통해 데이터베이스에 연결을 시도 할 때마다 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 제품군의 모든 최신 버전이 있어야합니다 (최신 편집 참조)
Ian Hunter

1
"클라이언트 API 헤더"버전은 PHP 실행 파일에 하드 코딩되어 있으므로 업그레이드 할 수 없습니다. PHP가 컴파일 될 때 PHP 패키지 관리자의 시스템에 설치된 mysql 헤더 (및 라이브러리)였습니다. 업그레이드 할 수 없습니다. 해당 버전의 PHP가 다시 작동하도록하려면 MySQL 5.1.X 라이브러리로 장애 복구하거나 PHP를 MySQL 5.5.X로 컴파일 된 버전으로 업그레이드해야합니다.
dAm2K

@ dAm2K 결과적으로 내 현재 mysqli.so 파일을 최신 파일로 교체 하여 버전 업그레이드 할 수있었습니다.
Ian Hunter

1
ABI 호환성을 확인하는 방법이 있는지 정말 모르겠습니다. 이상한 httpd 자식 오류에 대해 apache error_log를 확인하면됩니다. 3-4 일 후에도 오류가 발생하지 않으면 괜찮을 것입니다.
dAm2K

답변:


31

PHP는 MySQL 5.1로 컴파일되었지만 이제는 5.5.X 제품군의 mysql 라이브러리를 연결하고 있습니다. PHP를 MySQL 5.5로 컴파일 된 버전으로 업그레이드하거나 mysql 클라이언트 라이브러리를 5.1.x로 되돌려 야합니다.


1
기본적으로 이것은 내가 가진 문제 였지만 업그레이드하거나 다운 그레이드하는 대신 MySQL 5.5로 컴파일 된 PHP가있는 서버에서 mysqli.so 파일을 가져 와서 내 / usr / lib / php5 / 디렉토리에 붙일 수있었습니다. . 그러나 이것이 가장 안전한 경로인지 확실하지 않아서이 방법을 답으로 사용하고 싶지 않습니다. 당신의 도움을 주셔서 감사합니다.
Ian Hunter

127

MariaDB를 사용하고 있으며 비슷한 문제가 있습니다.

에서 MariaDB 사이트 ,하여 문제를 해결하는 것이 좋습니다

  1. PHP에서 mysqlnd 드라이버 사용으로 전환합니다 (권장 솔루션).
  2. 더 낮은 오류보고 수준으로 실행 :

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. MariaDB 클라이언트 라이브러리로 PHP를 다시 컴파일합니다.
  4. MariaDB와 함께 원래 MySQL 클라이언트 라이브러리를 사용합니다.

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

4
이것은 mysql에서도 작동하므로 답이되어야합니다
Justin E

1
이것은 Ubuntu에서 mysql과 php 불일치에 대한 내 문제를 해결했습니다. 감사!
jamescampbell 2015

1
감사합니다 이것은 mysql 클러스터 7.30에서 작동합니다. 나는 매우 행복 해요 : D
haidarvm

오류보고를 끕니다. 그것이 최고의 솔루션입니다. : D
MaXi32

2
maria db 및 php7을 사용하는 mysqlnd는 훌륭하게 작동합니다. 답변 주셔서 감사합니다!
Ricardo BRGWeb

68

새로운 MySQL 5.6 제품군의 경우 php5-mysql이 아닌 php5-mysqlnd를 설치해야합니다.

이 버전의 mysql 드라이버 제거

sudo apt-get remove php5-mysql

대신 이것을 설치하십시오

sudo apt-get install php5-mysqlnd

9
당신의 대답을 설명 해주세요. 이 패키지가하는 일과 같은 것.
Machavity

4
새로운 MySQL 5.6 제품군의 경우 php5-mysql이 아닌 php5-mysqlnd를 설치해야합니다.
Carlos Buenosvinos Zamora

문제가 해결되었습니다. MySql (AWS RDS MySql 인스턴스)을 5.5에서 5.6으로 업그레이드 할 때이 문제가 발생했습니다.
Rahul Prasad 2014

3
이것이 제대로 작동하려면 분명히 Apache를 다시 시작해야합니다. 명백한 것을 가리 키기 만하면
Metafaniel

1
이것은 내 phpMyAdmin을 망쳤습니다. Itseems phpMyAdmin은 MySQL 기본 드라이버에서 작동하지 않습니다.
Ehsan

23

MySQL에서도 동일하게 작동합니다.

sudo apt-get install php5-mysqlnd

나는 MySQL에 대한 솔루션을 찾으려고이 스레드를 읽었으며 ken의 대답도 보았지만 MariaDB에 대한 솔루션을 무시하고 몇 시간을 낭비했습니다. MySQL에도 동일하게 적용될 수 있다는 것이 저에게는 분명하지 않았습니다. 이 게시물은 내가 잃어버린 몇 시간을 절약하기위한 것입니다.


다음에 나를 위해 좋은 수정, sudo는 systemctl를 다시 시작 MySQL은 sudo를 systemctl를 다시 시작 아파치

설치를 수행하고 종속성이 php5-mysql을 제거하도록하는 것이 훨씬 좋습니다. 일부 시스템은 대안없이 php5-mysql을 제거하는 것을 좋아하지 않습니다.
루이 F 리베

11

이 오류의 근본 원인은 PHP가 얼마 전에 MySQL 클라이언트 라이브러리와 분리 되었기 때문입니다. 그래서 그 사람에 대해 PHP를 컴파일 (주로 리눅스의 이전 컴파일에)되어 일어나는 는 MySQL 클라이언트의 특정 빌드 이 패키지는 다음과 같이 표시됩니다에 CentOS에서 (업그레이드 (MySQL의 버전을 의미 관계가 설치된)이 아니라 mysqlclientXX, 어디 XX나타내는 패키지 번호). 이것은 또한 패키지 관리자가 MySQL의 하위 버전을 지원할 수 있도록합니다. 그것은 지저분한 방법이지만 PHP와 MySQL이 다른 라이센스를 사용하는 방법을 고려할 때 유일한 방법이었습니다.

MySQLND 는 더 이상 MySQL 클라이언트에 의존하지 않는 PHP 고유의 기본 드라이버 (ND)를 사용하여 문제를 해결합니다. 또한 사용중인 PHP 버전에 맞게 컴파일되었습니다. MySQLND가 PHP가 MySQL과 통신하도록 만든 다른 이유가 없다면 이것은 모든면에서 더 나은 솔루션입니다.

MySQLND를 설치할 수없는 경우 실제로 대부분의 경우이 오류를 무시해도됩니다. 그것은 무엇보다 FYI 통지에 불과합니다. 무섭게 들립니다.


2

MySQL 네이티브 드라이버 (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 클라이언트 버전을 사용합니다.
Stephane

1

내 wordpress 사이트에서 동일한 PHP warring이 있습니다 ...

오류 : 경고 : mysql_connect () : 헤더와 클라이언트 라이브러리 부 버전이 일치하지 않습니다. 헤더 : 50547 라이브러리 : 50628 in /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php on line 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 );
}

내 워드 프레스 사이트에서 오류없이


때문에 그냥은 참고로,이 PHP7에 따라 작동이 중지됩니다 mysql_로 기능이 제거되었습니다
Machavity

1

도메인 웹 호스팅을 위해 cpanel 또는 whm에 액세스 한 경우 ...

cPanel에서 "소프트웨어 및 서비스"탭으로 이동 한 다음 >> "PHP 버전 선택"을 클릭하고 >> 원하는 PHP 버전을 설정합니다.

경고 : mysql_connect () : 헤더와 클라이언트 라이브러리 부 버전이 일치하지 않습니다.  헤더 : 50547 라이브러리 : 50628 in chennaitechnologies.com

예 : 현재 PHP 버전 :

PHP 버전 [5.2] (5.2, 5.3, 5.4, 5.5, 5.6 사용 가능한 php 버전 목록)

경고 : 네이티브 PHP 버전의 경우 PHP 선택기를 통해 PHP 모듈 및 PHP 옵션을 변경할 수 없습니다.

내 wordpress 블로그 사이트에서 오류가 해결 된 후 5.6 php 버전을 선택했습니다.


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를 설치하면 문제가 해결되었습니다. 제안 해 주신 Carlos Buenosvinos Zamora에게 감사드립니다.

여기에있는 대부분의 답변은 Debian / Ubuntu를 기반으로하므로 누구에게나 도움이 될 수있는 경우를 대비하여 centos7에 대한 내 명령입니다.

설치된 php-mysql 패키지를 찾으려면

yum list installed | grep mysql

설치된 php-mysql 패키지를 제거하려면

yum remove php55w-mysql.x86_64

php-mysqlnd를 설치하려면

yum install php-mysqlnd.x86_64

-1

PHP 버전을 5.6에서 5.5로 변경하여 수정했습니다 .

제어판> CGI 스크립트로 이동하여 PHP 버전을 변경해야합니다.


우리는 모두 최신 버전으로 돌아 가려고 노력하고 있습니다.
karmafunk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.