MacOS本地GitLab Runner环境下Symfony+Doctrine创建双数据库时MySQL权限错误求助
解决Doctrine数据库创建权限错误(SQLSTATE[42000]: 1044 Access denied)
这个错误的核心原因很明确:你的数据库用户myapptest没有创建新数据库的权限。当你在GitLab CI中使用mysql:5.7服务时,默认情况下,通过MYSQL_USER创建的用户仅被授予对MYSQL_DATABASE(此处为cf_Central)的操作权限,没有全局的数据库创建权限,所以无法执行CREATE DATABASE cf_CleanerFuture命令。
下面提供两种可行的解决方案:
方案一:临时使用root用户执行数据库创建命令
因为root用户拥有数据库的全部权限,你可以在创建数据库时临时指定root的连接URL,绕过权限限制:
修改.gitlab-ci.yml中的script部分,调整创建数据库的命令:
script: - php bin/console doctrine:database:drop --force --if-exists --env=test --connection=default - php bin/console doctrine:database:drop --force --if-exists --env=test --connection=CleanerFuture # 使用root用户的URL创建CleanerFuture数据库 - php bin/console doctrine:database:create --env=test --if-not-exists --connection=CleanerFuture --url='mysql://root:$MYSQL_ROOT_PASSWORD@mysql:3306/' - php bin/console doctrine:migrations:migrate --env=test
方案二:给myapptest用户授予创建数据库的权限
在CI的初始化阶段,使用root用户给myapptest添加全局的CREATE权限,这样后续用该用户操作就不会受限:
在.gitlab-ci.yml的before_script中添加权限授予命令:
before_script: - apt-get update - apt-get install -y git libzip-dev - curl -sSk https://getcomposer.org/installer | php -- --disable-tls && mv composer.phar /usr/local/bin/composer - docker-php-ext-install mysqli pdo pdo_mysql zip - curl -sS https://get.symfony.com/cli/installer | bash - mv /root/.symfony/bin/symfony /usr/local/bin/symfony - composer remove ext-xdebug - composer install # 给myapptest用户添加创建数据库的权限 - mysql --host=mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "GRANT CREATE ON *.* TO 'myapptest'@'%'; FLUSH PRIVILEGES;"
执行完这个命令后,myapptest用户就拥有了创建任意数据库的权限,原有的创建命令可以保持不变。
额外检查点
确认你的config/test/doctrine.yaml中的数据库URL配置是正确的:
- 你通过
%env(resolve:DATABASE_URL)%cf_CleanerFuture拼接出完整的数据库连接URL,这个写法没问题,因为DATABASE_URL变量本身不带数据库名,拼接后会形成正确的mysql://myapptest:myapptest@mysql:3306/cf_CleanerFuture。
内容的提问来源于stack exchange,提问作者Wiildand
相关产品推荐
相关产品推荐

