网站迁移新服务器后数据库连接失败(1045权限错误)求助
解决Symfony迁移后数据库连接权限错误问题
针对你遇到的Access denied for user 'root'@'localhost' (using password: NO)错误,按以下步骤排查:
清理生产环境缓存
错误日志显示请求读取了app/cache/prod/classes.php,说明Symfony仍在使用旧的缓存配置。执行以下命令清理缓存:# Symfony 3+版本 php bin/console cache:clear --env=prod # Symfony 2.x版本 php app/console cache:clear --env=prod清理后需确保缓存目录权限正确,让Web服务器用户(如
www-data)能读写:chown -R www-data:www-data app/cache app/logs # 或临时开放权限(不推荐长期使用) chmod -R 777 app/cache app/logs验证parameters.yml配置正确性
检查app/config/parameters.yml中的数据库参数,确保以下字段无拼写错误、空格或空值:database_host: 127.0.0.1 # 优先用IP而非localhost,避免socket连接权限问题 database_port: 3306 database_name: 你的数据库名 database_user: 你的数据库用户名 database_password: 你的数据库密码 # 重点确认:这里不能为空,且和数据库用户密码一致同时检查是否存在
parameters_prod.yml文件,该文件会覆盖prod环境的默认配置,若存在需同步修改其中的数据库参数。直接测试数据库连接
编写简单的PHP测试脚本(命名为test-db.php放在web目录),验证数据库本身的连接是否正常:<?php $host = '127.0.0.1'; $dbname = '你的数据库名'; $user = '你的数据库用户名'; $pass = '你的数据库密码'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); echo "数据库连接成功"; } catch (PDOException $e) { echo "连接失败: " . $e->getMessage(); } ?>访问
myhost/web/test-db.php,若仍报错,说明数据库用户权限有问题:- 登录MySQL,检查
root@localhost是否设置了正确密码:SELECT user, host, authentication_string FROM mysql.user WHERE user='root'; - 若需要远程连接(如果数据库不在本地),需授权用户:
GRANT ALL ON 你的数据库名.* TO 'root'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;
- 登录MySQL,检查
检查环境变量覆盖
Symfony会优先读取环境变量中的数据库配置(如DATABASE_URL),若服务器设置了该变量,会覆盖parameters.yml的内容。执行以下命令查看:echo $DATABASE_URL若输出非预期值,需删除或修改该环境变量,或在
parameters.yml中明确指定参数覆盖环境变量。
内容的提问来源于stack exchange,提问作者Amino
相关产品推荐
相关产品推荐

