[实践OK]PHP 遇到mysql header不致的问题:Headers and client library minor version mismatch是myql不同版本同在一台机器上导致的,如何卸载重新安装以成功避免。

jackxiang 2014-3-19 16:10 | |
Percona MySQL 升級 5.6 後, PHP 的 mysql_connect() 就出現下述警告(Warning)訊息:
PHP Warning:  mysql_connect(): Headers and client library minor version mismatch. Headers:50531 Library:50613 ...
Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50153 Library:50613 in /data/htdocs/jackxiang.com/libraries/database/mysqlrw.php on line 271
要如何解決?

实践Ok步骤及注意点:
第一点:出现这种情况的可能性必定是因为这个Linux不是纯净的Linux,里面以前有rpm,或低版本的Mysql安装,如何解决之:
第一步:干掉所有的mysql相关的rpm包:
rpm -qa | grep -i mysql | xargs rpm -e --allmatches --nodeps
第二步:是干掉所有相关mysql的各种通过源码安装的安装包及动态库:
find /usr -name "mysql" -exec rm -rf {} \;
find /usr -name "my*" -exec rm {} \;
这下一下子就清静了。
注意点:
1)有可能出现你是干掉了,但是你再安装时还是出现上述错误,为何:
这涉及到有可能关于编译make的问题,makefile如果你颠倒了(也就是你先编译后,再去删除mysql,重新编译(没有clean掉生成的so,.a),因为之前编译的还在,它引用的还是原来的那个mysql header,依旧不行滴。),为此,你得先干死mysql,php,然后是把它们的目录挪动到加上-bak的,如:mysql-bak。
2)把源码包删除掉,重新tar 解压出一份目录,mysql再cmake,php再进行./configure。当然,如果通过make clean能清完,也可以不用删除再重新解包,我是直接删除,再完全重新编译。
总之,不能让先前安装好的包,先前编译的源码包里沾染上原来旧版本的mysql包,这才是核心,否则,编译出来问题依旧,达不到想要的目的。
———————————————————————————————————————————————————————————————

出現此訊息 Warning: mysql_connect() [function.mysql-connect]: Headers and client library minor version mismatch.
是因為 PHP 在編譯時, MySQL 的 header 跟 library 不一致所造成,
有可能系統中曾經裝了兩個版本以上的 MySQL, 可能是套件或 tarball 安裝。


PHP报:
KoException [ 0 ]: mysql_connect(): headers and client library minor version mismatch. headers:50153 Library:50614
一)Mysql头文件header(如果其他地方有头文件,而又是系统PATH里的优先找找的,可能header头就和新的mysql版本里的头不一样):
/usr/local/mysql/include/my_global.h
/*
Prevent inclusion of  Windows GDI headers - they define symbol
ERROR that conflicts with mysql headers.                                                                                                                                      
*/

二)PHP源码识别匹配并报错的代码:
./ext/mysqli/mysqli_nonapi.c:                                           "Headers and client library minor version mismatch. Headers:%d Library:%ld",
#if !defined(MYSQL_USE_MYSQLND)
    if ((MYSQL_VERSION_ID / 100) != (mysql_get_client_version() / 100)) {
        php_error_docref(NULL TSRMLS_CC, E_WARNING,
                        "Headers and client library minor version mismatch. Headers:%d Library:%ld",                                                                          
                        MYSQL_VERSION_ID, mysql_get_client_version());
    }

./ext/mysql/php_mysql.c:                                                "Headers and client library minor version mismatch. Headers:%d Library:%ld"
#if !defined(MYSQL_USE_MYSQLND)
    if ((MYSQL_VERSION_ID / 100) != (mysql_get_client_version() / 100)) {
        php_error_docref(NULL TSRMLS_CC, E_WARNING,
                        "Headers and client library minor version mismatch. Headers:%d Library:%ld",                                                                          
                        MYSQL_VERSION_ID, mysql_get_client_version());
    }
#endif

解決方式: 把所有 MySQL 套件移除及 /usr 其下所有 MySQL 相關 header 及 library 刪除, 再重裝 MySQL (用套件或 tarball 均可)
rpm -qa | grep -i mysql | xargs rpm -e --nodeps # 僅適用 RPM 系 Linux
find /usr -name "mysql" -exec rm -rf {} \;
find /usr -name "my*" -exec rm {} \;
http://pank.org/blog/2012/02/headers-client-library-minor-version-mismatch.html
果然有老版本的mysql:
[root@localhost vhost]# rpm -qa | grep -i mysql
mysql-devel-5.0.95-5.el5_9
mysql-5.0.95-5.el5_9
mysql-5.0.95-5.el5_9
mysql-devel-5.0.95-5.el5_9

我只是把mysql-5.0.95-5.el5_9卸载了,没有重新编译mysql5.6.12,问题依旧存在,卸载rpm时还遇到 specifies multiple packages,最后强制卸载mysql旧的rpm包:
http://jackxiang.com/post/6976/
—————————————————————————————————————————————————————————————

昨日在 MySQL Server 遇到使用 Prepared Statements 出現問題, 系統出現以下訊息:
headers and client library minor version mismatch

出現問題原因是 mysql server 及 mysql client 的版本不一致, 因為早前透過 yum 更新了 mysql, 但就沒有更新 php, 所以 php 裡面的 mysql client 還是使用舊版, 版本只有小許不同就會出現這個問題。但奇悝是執行其他 SQL Query 則沒有問題, 只是使用 Prepared Statements 才有問題。

重新編譯了 PHP 後, 便可回復正常。

来自:http://blog.longwin.com.tw/2013/10/php-headers-client-library-minor-version-mismatch-2013/
http://www.hkcode.com/programming/773
http://www.joe-ho.com/mysql_connect-headers-and-client-library-minor-version-mismatch/


Fix PHP mysql_connect() Headers and client library minor version mismatch:
出現此訊息 Warning: mysql_connect() [function.mysql-connect]: Headers and client library minor version mismatch.
是因為 PHP 在編譯時, MySQL 的 header 跟 library 不一致所造成,
有可能系統中曾經裝了兩個版本以上的 MySQL, 可能是套件或 tarball 安裝

解決方式: 把所有 MySQL 套件移除及 /usr 其下所有 MySQL 相關 header 及 library 刪除, 再重裝 MySQL (用套件或 tarball 均可)
rpm -qa | grep -i mysql | xargs rpm -e --nodeps # 僅適用 RPM 系 Linux
find /usr -name "mysql" -exec rm -rf {} \;
find /usr -name "my*" -exec rm {} \;

实践:
[root@emulMachine opt]# rpm -qa|grep mysql
mysql-devel-5.0.95-5.el5_9
mysql-5.0.95-5.el5_9
mysql-5.0.95-5.el5_9
mysql-devel-5.0.95-5.el5_9
出现:
[root@emulMachine opt]# rpm -e mysql-devel-5.0.95-5.el5_9
error: "mysql-devel-5.0.95-5.el5_9" specifies multiple packages
加上如下参数:
rpm -qa | grep -i mysql | xargs rpm -e --allmatches --nodeps
rpm卸载时遇到"xxx specifies multiple packages"的问题 ,加上--allmatches:
原文:http://blog.csdn.net/yasi_xi/article/details/7597353

指名mysql安装目录及mysql_config目录:


来自:http://pank.org/blog/2012/02/headers-client-library-minor-version-mismatch.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/7103/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2014-8-10 15:30
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]