CentOS 7安装Oro CRM 4.2未读取parameters.yml数据库配置 误用root@localhost连库报错
Oro CRM 4.2 安装阶段 MySQL 凭证识别异常解决方案
问题本质
抛出Access denied for user 'root'@'localhost' (using password: NO)报错,根本原因是系统完全没有读取到你在parameters.yml中配置的数据库连接参数,直接触发了PDO MySQL扩展的默认连接逻辑——该逻辑默认用当前系统会话下的root账号、无密码连接本地MySQL,和你写在文件里的配置没有关联。
分步排查解决
- 优先处理prod环境编译缓存
Oro基于Symfony开发,prod运行模式下不会实时读取根目录的参数文件,首次执行命令时会把所有配置编译后存到var/cache/prod目录下。如果首次执行安装命令时,系统已经把默认的root连接参数编译进了缓存,后续就算改对了parameters.yml,系统也会一直读缓存里的旧配置。直接执行命令清空全量缓存:rm -rf var/cache/prod/* - 核对parameters.yml的参数层级
确认所有数据库连接参数完全嵌套在parameters:顶级节点下,参数名和Oro要求的完全一致,不存在层级错位、参数名写错的问题。正确的参数结构参考:
如果参数写在了parameters: database_driver: pdo_mysql database_host: 你的实际数据库地址 database_port: 3306 database_name: 你的业务库名 database_user: 你的实际数据库账号 database_password: 你的实际数据库密码parameters:节点外面,或者参数名(比如把database_user错写为db_user)不匹配,Doctrine组件读不到自定义参数,就会直接回退到PDO默认连接逻辑,和当前报错的场景完全一致。 - 排查Shell环境变量覆盖
Symfony的配置加载优先级里,同名的Shell环境变量优先级高于parameters.yml的文件配置。如果当前执行安装命令的终端会话里,提前通过export设置过和数据库参数同名的环境变量(比如DB_USER、DATABASE_URL),会直接覆盖文件里的配置。先执行命令清空相关环境变量:
清空后再重新跑安装流程。unset DB_USER DB_PASSWORD DATABASE_URL database_user database_password - 检查Doctrine配置的硬编码问题
打开app/config/doctrine.yml检查数据库连接配置,确认账号、密码的位置是用%database_user%、%database_password%的占位符引用parameters.yml中的值,没有硬编码写死root账号、空密码的配置项。
重新执行安装
以上步骤校验完成后,重新跑安装命令即可正常加载正确的数据库配置:
php bin/console oro:install --env=prod --timeout=200
内容的提问来源于stack exchange,提问作者user3698115
相关产品推荐
相关产品推荐

