PHP Warning: mysqli_connect(): Headers and client library minor version mismatch. Headers:50173 Library:50312 |
사용중인 php와 mysql(혹은 mariadb) 사이에 버전이 일치하지 않아 위와 같이 오류 메시지를 낼때가 있다. 사실 웹 서버 동작에는 그리 지장이 없기 때문에 무시하고 지나갈 수도 있다. 그런데 웹 서버 로그보다 저 오류 로그가 더 크면 사실 걱정을 좀 해야 한다. 그리고 그런 상황에 처했으니 이를 어떻게든 해결해야 한다.
자료를 많이 검색해 봤는데, php 와 mysql을 연결할때 mysqli 대신에 mysqlnd(mysql native driver)를 쓰라고 나온다. 일반 사용자들이 무슨 힘이 있겠는가. 앞으로 계속 mysqlnd를 쓰라고 하니 쓸 수 밖에. 그런데 이게 yum을 통해서 설치하면 된다고 하는데 그게 또 잘 안된다. 왜 안되는가 살펴봤더니 아래와 같은 환경이어서 그렇더라.
CentOS 6.x php 5.3 이하 |
mysql은 알아서 잘 업데이트가 되는데 php는 보통 OS 설치할때 한번 설치하면 웬만해서는 잘 바꾸지 않는다. 일단 제일 위 오류 메시지가 나오면 쉘에서 아래와 같이 입력해 보자.
php -i | grep 'Client API' |
위 CentOS와 php 환경에서는 다음과 같이 나온다.
Client API version => 5.3.12-MariaDB Client API library version => 5.3.12-MariaDB Client API header version => 5.1.73 Client API version => 5.3.12-MariaDB |
딱 봐도 Client API header version이 낮다. 저걸 바꿔 주려면 mysqlnd를 설치하는 수 밖에 없다.
1차 시도
yum erase php-mysql rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm yum install php-mysqlnd |
왜 1차 시도라고 썼겠는가. 저렇게 하면 설치가 안된다. yum이 php-mysqlnd를 찾지 못한다.
2차 시도
yum --enablerepo=remi,remi-test install php-mysqlnd |
아. 2차 시도 시에는 php 5.4 버전이 설치된다! 이래도 되나? 어쨌건 성공적으로 설치했다. 그리고 중요한 마무리. 이렇게 설치를 했을 경우 mysql과 httpd(주로 apache)를 다시 시작해야 한다.
(그리고 phpmyadmin도 다시 설치해야 한다.)