小明是个刚入门的全栈开发者,今天他兴奋地写完PHP代码,准备测试用户注册功能,结果浏览器一刷新,直接蹦出个“无法连接数据库”的报错页面!😱
他反复检查了代码里的主机名、用户名、密码,甚至重启了MySQL服务,但问题依旧,最后发现,居然是MySQL 8.0的认证插件改了默认设置,而他的PHP版本太旧导致的!💥
如果你也遇到过类似抓狂的情况,这篇2025年最新整理的攻略,绝对能帮你避开90%的坑!
症状:报错Access denied for user 'xxx'
或Unknown database 'yyy'
。
原因:主机名、用户名、密码或数据库名写错了!
解决方法:
mysql -u 用户名 -p密码 -h 主机名 数据库名
症状:PHP报错Can't connect to MySQL server on 'localhost'
。
解决方法:
sudo systemctl start mysql # 启动服务 sudo systemctl status mysql # 检查状态
症状:本地能连接,但服务器报错Connection refused
。
原因:3306端口被防火墙或云服务器安全组屏蔽。
解决方法:
sudo ufw allow 3306/tcp # Ubuntu
症状:报错Call to undefined function mysqli_connect()
。
原因:PHP没安装mysqli
或PDO
扩展。
解决方法:
sudo apt install php-mysql # 安装mysqli sudo systemctl restart apache2 # 重启Web服务
php.ini
是否启用扩展: extension=mysqli
症状:报错Access denied for user 'xxx'@'%'
。
原因:MySQL用户没有远程连接权限。
解决方法:
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码'; FLUSH PRIVILEGES;
症状:PHP 7.3以下版本报错Authentication plugin 'caching_sha2_password' cannot be loaded
。
原因:MySQL 8.0默认使用更安全的caching_sha2_password
插件,而旧版PHP不支持。
解决方法:
ALTER USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
<?php $host = 'localhost'; $dbname = 'test_db'; $user = 'root'; $pass = '123456'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "🎉 连接成功!"; } catch (PDOException $e) { error_log("💥 连接失败:" . $e->getMessage()); die("数据库连接错误,请检查配置!"); } ?>
; 在php.ini中修改 log_errors = On error_log = /var/log/php_errors.log
tail -f /var/log/php_errors.log
Access denied
:权限或密码错误 Unknown database
:数据库不存在 Connection refused
:服务未启动或端口被拦截 如果你用的是腾讯云、阿里云等服务器:
遇到问题别慌张,按照这份攻略一步步排查,你也能成为数据库连接小能手!🚀
(信息来源:腾讯云、CSDN、PHP官方文档,更新至2025年8月)
本文由 业务大全 于2025-08-27发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vds.7tqx.com/wenda/747537.html
发表评论