php connect to mysql server error_PHP连接数据库错误:Can't connect to MySQL server on '127.0.0.1' (13)2003...

学习PHP中的。今天学习php连接数据库,代码如下:<?php

$link = mysql_connect("127.0.0.1","root","123456");

if($link) {

echo '数据源连接成功';

}

else {

echo "数据库连接失败,请检查帐户密码".  mysql_error().mysql_errno();

}

?>

本地测试正常可以访问

php /var/www/html/conndb.php

鏁版嵁婧愯繛鎺ユ垚鍔   

windows机器使用IE无法访问,报错如下:

Can't connect to MySQL server on '127.0.0.1' (13)2003

问题点:防火墙与selinux

临时解决方法:

service iptables stop  #停止iptables

setenforce 1              #临时关闭Selinux

永久方法

chkconfig --leve 12345 iptables off

vim /etc/selinux/config

第7行的:SELINUX= enforcing

修改:SELINUX= disabled

重启机器:reboot

[root@web-php ~]# sestatus -v

SELinux status:                 disabled

79f7bb6c4f0b820a4bcd769c92bd2847.png

### 解决方案分析 #### 错误描述 错误 `ERROR 2003 (HY000)` 表明客户端无法连接到指定的 MySQL 服务器地址和端口。具体原因可能涉及网络配置、服务状态或权限设置等问题。 --- #### 可能的原因及解决方案 1. **MySQL 服务未启动** 如果本地或远程 MySQL 服务未运行,则会触发此错误。可以通过以下命令检查服务状态并尝试重启服务: ```bash sudo systemctl status mysql sudo systemctl restart mysql ``` 若服务未能正常启动,需进一步排查日志文件 `/var/log/mysql/error.log` 中的内容[^1]。 2. **防火墙阻止访问** 防火墙规则可能会阻止外部 IP 地址通过特定端口(默认为 3306)访问 MySQL 服务。可以临时禁用防火墙测试连通性: ```bash sudo ufw disable ``` 或者允许 3306 端口流量: ```bash sudo ufw allow 3306/tcp ``` 3. **绑定地址配置问题** 默认情况下,MySQL 绑定的是 localhost (`127.0.0.1`) 而不是所有网卡接口。如果希望其他机器能够访问该数据库实例,需要修改 MySQL 的配置文件 `/etc/mysql/my.cnf` 或 `/etc/my.cnf`,找到 `[mysqld]` 下的 `bind-address` 参数,并将其更改为如下内容之一: - 将其设为服务器的实际 IP 地址(如 `192.168.1.100`) - 设置为 `0.0.0.0` 来监听所有可用的网络接口。 修改完成后重新加载 MySQL 配置: ```bash sudo systemctl reload mysql ``` 4. **SELinux 或 AppArmor 干扰** SELinux 和 AppArmor 安全模块有时会对 MySQL 进程施加额外限制。如果是这种情况,可暂时关闭这些安全机制来验证是否与此有关联: 对于 SELinux: ```bash setenforce 0 ``` 对于 AppArmor: ```bash sudo aa-disable /usr/sbin/mysqld ``` 5. **用户权限不足** 即使网络层面无障碍,但如果目标用户的权限仅限于本机登录而无权接受来自其他主机的请求也会引发同样的错误消息。因此应该核查对应账户是否有足够的权限执行跨设备操作。例如授予名为 `beer` 用户完全控制权以便可以从任意位置接入: ```sql GRANT ALL PRIVILEGES ON *.* TO 'beer'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 6. **套接字路径不匹配** 当前环境变量或者编译参数可能导致实际使用的 Unix Socket 文件路径与预期不符。确认当前安装版本所期望的位置以及操作系统提供的确切位置之间的一致性非常重要。通常 Linux 发行版预定义好的地方有 `/var/run/mysqld/mysqld.sock`, `/tmp/mysql.sock` 等几种可能性[^3]^, ^[^2]. --- ### 总结建议 综合上述各点进行全面诊断之后再采取相应措施解决问题最为稳妥有效。先确保基础的服务处于良好运转之中;接着调整必要的网络安全策略使其适应需求场景;最后审查细粒度授权设定从而保障合法主体顺利达成目的的同时维护整体系统的安全性。 ```python # 示例 Python 测试脚本用于验证连接情况 import pymysql.cursors try: connection = pymysql.connect(host='127.0.0.1', user='root', password='your_password_here', database=None, cursorclass=pymysql.cursors.DictCursor) except Exception as e: print(f"MySQL Connection Error: {e}") finally: if connection.open: connection.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值