在GitHub Actions中使用WP-CLI安装WordPress时数据库连接失败
问题
我正在学习GitHub Actions,尝试通过WP-CLI安装WordPress,以下是我的Workflow YAML文件:
name: WordPress install on: [workflow_dispatch] jobs: run: runs-on: ${{ matrix.operating-system }} strategy: matrix: operating-system: [ubuntu-latest] php-versions: ['7.2'] name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }} steps: - name: Checkout uses: actions/checkout@v1 - name: Setup PHP uses: shivammathur/setup-php@v1 with: php-version: ${{ matrix.php-versions }} extension-csv: mbstring, intl #optional, setup extensions ini-values-csv: post_max_size=256M, short_open_tag=On #optional, setup php.ini configuration coverage: xdebug #optional, setup coverage driver pecl: false #optional, setup PECL - name: Set up MySQL run: | sudo /etc/init.d/mysql start - name: Install wp run: | curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar php wp-cli.phar core download echo 1 php wp-cli.phar config create --dbname=wordpress_test --dbuser=root --dbpass=root --dbhost=127.0.0.1 --dbprefix=wptests_ echo 2 php wp-cli.phar db create php wp-cli.phar db check echo 30 mysql --user="root" --password="root" --execute='show databases;' echo 31 php wp-cli.phar db query 'SHOW TABLES' --allow-root echo 32 php wp-cli.phar db tables echo 3 php wp-cli.phar core install --url=wpclidemo.dev --title="WP-CLI" --admin_user=wpcli --admin_password=wpcli --admin_email=info@wp-cli.org echo 4 php wp-cli.phar option get siteurl echo 5
执行后控制台输出如下:
Success: WordPress downloaded. 1 Success: Generated 'wp-config.php' file. 2 Success: Database created. Success: Database checked. 30 Warning: Using a password on the command line interface can be insecure. Database information_schema mysql performance_schema sys wordpress_test 31 32 Error: Error establishing a database connection. Error: Process completed with exit code 1.
可见直接通过mysql命令可正常查看数据库,但WP-CLI执行数据库相关命令时出现“Error establishing a database connection”错误,且该流程在本地环境可正常运行,请问该错误的原因是什么?
原因分析与解决办法
核心原因
GitHub Actions的Ubuntu runner环境中,MySQL的root用户权限配置与本地环境存在差异:
- 你手动执行
mysql --user="root" --password="root"时,默认通过Unix socket连接数据库,此时该环境的root用户验证规则允许使用root密码登录; - 而WP-CLI配置中指定
--dbhost=127.0.0.1,会通过TCP/IP协议连接数据库,该环境下的root用户未被授权通过TCP/IP使用root密码登录,导致连接失败。
解决办法
有两种可行的修复方案:
方案1:统一数据库连接方式
将wp-cli.phar config create命令中的--dbhost=127.0.0.1改为--dbhost=localhost,让WP-CLI使用Unix socket连接数据库,和手动执行mysql命令的连接方式保持一致:
php wp-cli.phar config create --dbname=wordpress_test --dbuser=root --dbpass=root --dbhost=localhost --dbprefix=wptests_
方案2:授权root用户TCP/IP登录
在启动MySQL后添加授权命令,允许root用户从127.0.0.1使用密码root登录:
修改Set up MySQL步骤的命令为:
sudo /etc/init.d/mysql start mysql --user="root" --password="root" --execute="GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES;"
内容的提问来源于stack exchange,提问作者Daniil Dubchenko
相关产品推荐
相关产品推荐

