You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站迁移新服务器后数据库连接失败(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;
  • 检查环境变量覆盖
    Symfony会优先读取环境变量中的数据库配置(如DATABASE_URL),若服务器设置了该变量,会覆盖parameters.yml的内容。执行以下命令查看:

    echo $DATABASE_URL
    

    若输出非预期值,需删除或修改该环境变量,或在parameters.yml中明确指定参数覆盖环境变量。

内容的提问来源于stack exchange,提问作者Amino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:30:46