database connect failed!Can't connect to MySQL server on '127.0.0.1' (13)

本文介绍了当使用PHP尝试连接本地MySQL数据库时遇到“database connect failed”错误的解决方法。通过调整SELinux设置允许HTTP服务进行网络连接,最终解决了无法连接数据库的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

php链接数据库,出现如下错误

database connect failed!Can't connect to MySQL server on '127.0.0.1' (13)


解决办法:

[root@localhost ~]# getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_mod_auth_ntlm_winbind --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_manage_ipa --> off
httpd_read_user_content --> off
httpd_run_stickshift --> off
httpd_serve_cobbler_files --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_fusefs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off
httpd_use_openstack --> off
httpd_verify_dns --> off

所以,执行如下命令,ok
[root@localhost ~]# setsebool httpd_can_network_connect 1

### MySQL ERROR 2003 (HY000): Can't Connect to MySQL Server on Localhost (10061) 当遇到 `ERROR 2003 (HY000)` 错误时,通常表示客户端无法连接到本地或远程的 MySQL 数据库服务器。以下是可能的原因以及解决方案: #### 原因分析 1. **MySQL 服务未启动** 此错误最常见的原因是 MySQL 的服务尚未启动。如果服务没有运行,则任何尝试连接数据库的操作都会失败。 2. **防火墙阻止连接** 防火墙可能会拦截来自客户端的请求,尤其是当你试图通过网络访问 MySQL 实例时。 3. **配置文件中的绑定地址不正确** 默认情况下,MySQL 绑定的是 `127.0.0.1` 或者 `[::1]`(IPv6)。如果你修改了这些设置而未重新加载服务,可能导致连接中断[^3]。 4. **端口被占用或其他冲突** 如果其他程序占用了默认端口 `3306`,则 MySQL 将无法监听该端口,从而引发连接问题。 5. **权限不足或密码验证失败** 初始安装完成后,默认 root 用户可能不需要密码登录,但如果设置了复杂的安全策略,也可能因为认证机制不同而导致拒绝访问[^2]。 #### 解决方案 ##### 方法一:确认并启动 MySQL 服务 进入 Windows 的服务管理器 (`services.msc`) 并查找名为 “MySQL” 的条目。如果没有找到,请检查是否已正确安装 MySQL 软件包。对于 Linux 系统,可以执行如下命令来确保服务正在运行: ```bash sudo systemctl status mysql ``` 如果停止了,可以用下面这条指令重启它: ```bash sudo systemctl start mysql ``` ##### 方法二:调整防火墙规则 允许特定 IP 地址或者开放指定端口给外部设备访问。例如,在 CentOS 上添加例外可使用以下脚本: ```bash firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload ``` ##### 方法三:核查 my.cnf/my.ini 文件设定 编辑位于 `/etc/mysql/`, `/usr/local/mysql/support-files/`, 或 C:\ProgramData\MySQL\MySQL Server X.X 下面的配置文档,寻找类似这样的行数: ```ini bind-address = 127.0.0.1 port = 3306 ``` 将其更改为适合环境需求的内容后再保存退出,并记得通知守护进程应用更改后的参数表单[^4]: ```bash sudo service mysqld restart ``` ##### 方法四:排查端口可用性 利用 netstat 工具查看是否有进程正占据目标端口号: ```bash netstat -an | grep :3306 ``` 假如发现异常情况存在的话,要么杀死对应 PID 号码下的实例,要么改用别的空闲位置作为新的通讯渠道。 ##### 方法五:重置 Root 密码 有时候即使解决了上述所有技术层面障碍之后仍然会碰到身份校验方面的麻烦事。那么不妨试着按照官方指南说明的方法去初始化一个新的超级管理员账户资料吧! --- ### 示例代码片段 这里提供一段简单的 Python 脚本来测试能否成功建立与 MySQL 数据源之间的联系关系: ```python import pymysql.cursors try: connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='test_db' ) except Exception as e: print(f"Connection failed due to {e}") finally: if 'connection' in locals(): connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值