mysql_connect() Fatal error: (转)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
mysql_connect() Fatal error: (转)
 
 
 

http://dev.csdn.net/article/54/54273.shtm
【问题来源】
近日新装一台RHEL AS3 的服务器;在安装的时候,没有选择安装数据库(MYSQL)相关的包。由于RHELAE3自带的MYSQL是3.23版本的,我想安装的时候,当MOUNT光驱的时候整个系统就死掉键盘鼠标毫无反应远程登录不入,所以我干脆就直接安装MYSQL4.1。问题也许就在此引发了。 
RHEL AS3 自带APACHE2和PHP4.3.2。当我把 [
MySQL-server-4.1.7-0.i386.rpm
]安装好之后,试图安装[
MolyX
]论坛时,发现执行数据库连接时发生致命错误: 
Fatal error: Call to undefined function: mysql_connect() 
这个问题真是够致命的。
经过在 httpd.conf ,php.ini 和 my.cnf 这几个配置文件多方修改测试,问题依然。
之后到 [google] 搜啊搜,找到很多相关的解决方案。
----------------------------------------------
说法[1] :这个问题概括起来说就是你的PHP不支持mysql_connect()函数。为什么呢?这是由于PHP是一种模块化的设计,除了核心的内容,其他都是可选的。之所以不支持,是因为在编译PHP时没有加入对MYSQL数据库的支持。 
说法[2] : 
- 如果你的操作系统是Linux/Unix 
1.如果PHP是自己编译的,那么要重新做。在configure后面加上--with-mysql选项 
2.如果是用的RPM,建议到网上去找找已经内置MYSQL支持的RPM包,重新装上去 
说法[3]:因为卸载了以前的mysql,重装的mysql又不是rpm装的 
所有安装后的路径不同了;但是在原先装apache的时候需要./configure \ 
--prefix=/usr/local/php \ 
--with-mysql=/usr/local/mysql \ (主要是这句) 
用来指定mysql的安装路径 
所以在重装了之后因为路径不一样,apache就无法找到mysql的安装路径 
也就出现了mysql_connect:未被定义的错误 
----------------------------------------------------------------
头痛的是我的 phpinfo() 打出来的信息均是正常的。在RHEL光盘上找了很多PHP、MYSQL相关的LIB/DBI/ODBC等包都装了,问题还是没解决。
后来在MYSQL的论坛上看到可以使用 dl('mysql.so') 来动态装载模块。于是做了一个测试的PHP文件:
----------------------------------------
----------------------------------------
----------------------------------------
结果错误信息如下:
----------------------------------------
php version=4.3.2
Warning: dl(): Unable to load dynamic library '/usr/lib/php4/mysql.so' - libmysqlclient.so.10: cannot open shared object file: No such file or directory in /usr/www//test.php on line 9
function test output
Fatal error: Call to undefined function: mysql_connect() in /usr/www/inc.php on line 7
----------------------------------------
结果又多了一个线索:libmysqlclient.so.10。原来是这个模块没有装载成功。
然后我在系统 find 一下,发现根本没有这个文件存在。应该是少装了什么东西。
--------------------------------------------
# rpm -ivh /home/dkk/libdbi-dbd-mysql-0.6.5-5.i386.rpm 
error: Failed dependencies:
        libdbi = 0.6.5-5 is needed by libdbi-dbd-mysql-0.6.5-5
        libmysqlclient.so.10 is needed by libdbi-dbd-mysql-0.6.5-5
    Suggested resolutions:
        libdbi-0.6.5-5.i386.rpm
        mysql-3.23.58-1.i386.rpm
--------------------------------------------
在MYSQL.com那个搜索 libmysqlclient.so ,终于找到了问题症结所在:
MYSQL4版本以上,调用libmysqlclient.so 的方式改了,跟MYSQL3.23不一样,而PHP4.3.2和APACHE还是以旧的方式来调用,因此就找不到libmysqlclient.so 了。
英文原文如下:
-------------------------------------------
Ensure that you don't have any MySQL clients that use shared libraries (like the Perl DBD::mysql module). If you do, you should recompile them, because the data structures used in `libmysqlclient.so' have changed. The same applies to other MySQL interfaces as well, such as the Python MySQLdb module.
-------------------------------------------
具体描述见帖子:
http://dev.mysql.com/doc/mysql/en/Upgrading-from-3.23.html
问题找到了,可是我并不想重新编译PHP,尽管5.0都已经出来了。在MYSQL.COM那里有些RPM,我把它们都装了上去,具体如下:
# rpm -ivh 
MySQL-client-4.1.7-0.i386.rpm
# rpm -ivh 
MySQL-devel-4.1.7-0.i386.rpm
# rpm -ivh 
MySQL-shared-4.1.7-0.i386.rpm 
# rpm -ivh 
MySQL-shared-compat-4.1.7-0.i386.rpm
我觉得最重要的是最后一个包(-shared-compat-),因为MYSQL.COM注明了该包包含了3.23的模块;而且,我是安装完上述的一个包就(重启mysql和apache)测试一下那个test.php,直到安装到最后一个包,才发现出现了一个新的“成功的”错误:
Warning: Function registration failed - duplicate name - mysql_connect in /usr/www/test.php on line 9
嘿,这个错误的出现,正说明了系统已经成功装载了 mysql.so ,当test.php的 dl('mysql.so') 尝试重复装载时就触发了该错误。到这里终于可以笑一笑了。
把test.php中的 dl('mysql.so')  注释掉,重新测试。嘿,一个“老错误”跑了出来:
Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in /usr/www/inc.php on line 7
呵呵,我已经认识它好久啦。只是由于MYSQL4的密码加密方式改变所致。
以root登录到mysql执行语句:update user set password=OLD_PASSWORD('password') where user='root'; 就行啦。
具体描述见以下帖子:
http://dev.mysql.com/doc/mysql/en/Old_client.html
到此,总算可以圆满解决了问题了。嗨,还真费劲,主要原因还是在于自己对于整个系统的东西不甚了解。

如果谁有更好的解决方法,请跟着补充哦。 :-)



本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/387546

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
网络协议 关系型数据库 MySQL
MySQL报ERROR 2002 (HY000)解决
通过上述步骤,可以有效地解决MySQL连接时出现的 `ERROR 2002 (HY000)`错误。这些步骤包括检查和启动MySQL服务、配置文件检查、套接字文件检查、日志文件分析、进程检查、防火墙设置、客户端配置和最终的MySQL重装。确保每个步骤都按顺序执行,有助于快速定位和解决问题,使MySQL服务器恢复正常运行。
112 0
|
3月前
|
SQL 关系型数据库 MySQL
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
这篇文章提供了解决MySQL数据库"Access denied for user 'root'@'localhost' (using password: YES)"错误的方法,通过跳过密码验证、修改root密码,然后重启服务来解决登录问题。
mysql密码错误-ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor:yes)
|
4月前
|
缓存 关系型数据库 MySQL
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
error: Failed dependencies: mariadb-connector-c-config is obsoleted by mysql-community-server-8.0.36-1.el7.x86_64 问题解决
230 19
|
3月前
|
关系型数据库 MySQL Java
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
|
4月前
|
关系型数据库 MySQL Linux
error: Failed dependencies: libncurses.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 libtinfo.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 如何解决?
error: Failed dependencies: libncurses.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 libtinfo.so.5()(64bit) is needed by mysql-community-client-8.0.36-1.el7.x86_64 如何解决?
510 3
|
4月前
|
关系型数据库 MySQL 测试技术
MySQL 报错 ERROR 1709: Index column size too large
MySQL 报错 ERROR 1709: Index column size too large
201 4
|
4月前
|
关系型数据库 MySQL
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
241 2
|
4月前
|
网络协议 关系型数据库 MySQL
启动mysql时的异常为:[ERROR] Can‘t start server: Bind on TCP/IP port. Got error: 98: Address already in used
启动mysql时的异常为:[ERROR] Can‘t start server: Bind on TCP/IP port. Got error: 98: Address already in used
|
4月前
|
SQL 关系型数据库 MySQL
You have an error in your SQL syntax;check the manual that corresponds to you Mysql server version
You have an error in your SQL syntax;check the manual that corresponds to you Mysql server version
|
4月前
|
关系型数据库 MySQL 数据库
mysql 中登录报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)ERROR
mysql 中登录报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)ERROR
下一篇
无影云桌面