Shopware CLI执行命令时数据库连接失败问题求助
解决Shopware CLI数据库连接报错SQLSTATE[HY000] [2002]的方案
核心原因
Web环境与CLI环境的数据库连接逻辑存在差异:Web端可能默认使用TCP连接,而CLI端若配置中写localhost,PHP会优先尝试Unix套接字连接,当套接字路径配置错误或不存在时就会触发该报错。
具体解决步骤
1. 修正.env文件的数据库连接地址
打开项目根目录下的.env文件,确保DATABASE_URL使用IP地址而非localhost,强制走TCP连接:
DATABASE_URL=mysql://数据库用户名:数据库密码@127.0.0.1:3306/数据库名?serverVersion=8.0&charset=utf8mb4
修改后执行以下命令刷新配置缓存:
bin/console cache:clear
2. 强制在Doctrine配置中指定TCP连接参数
若.env修改无效,直接编辑config/packages/doctrine.yaml,明确配置TCP连接参数,覆盖默认的套接字逻辑:
doctrine: dbal: default_connection: default connections: default: # 保留原有的url配置,同时强制指定TCP参数 url: '%env(resolve:DATABASE_URL)%' host: '127.0.0.1' port: 3306 dbname: '你的数据库名' user: '你的数据库用户名' password: '你的数据库密码' driver: 'pdo_mysql' server_version: '8.0' # 替换为你的MySQL版本 charset: utf8mb4
保存后再次清理缓存:
bin/console cache:clear
3. 检查CLI环境的PHP配置
如果上述方法仍无效,检查PHP CLI的套接字配置是否与Web环境不一致:
- 执行
php -i | grep "default_socket"查看CLI的MySQL套接字路径 - 在Web端执行
phpinfo()查看Web环境的套接字路径 - 若路径不同,修改CLI的
php.ini文件(可通过php --ini找到路径),将mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket三个参数的值改为Web环境的正确路径。
4. 确保CLI使用与Web一致的环境
执行CLI命令时,明确指定运行环境(比如生产环境):
bin/console plugin:list --env=prod
内容的提问来源于stack exchange,提问作者marks
相关产品推荐
相关产品推荐

