为什么mysql CLI可以连接,而不是WordPress?

时间:2017-06-21 20:46:46

标签: php mysql wordpress docker ansible

我有一个Wordpress(php-fpm / nginx)服务器,非常新鲜。在CentOS上运行。我还有一个docker容器,由vanilla mysql-server映像构建。

MySQL配置

它在端口3306上运行,并且所有MySQL用户都在MySQL中注册了主机172.17.0.1(例如root@172.17.0.1),这是docker的网关IP。 docker容器使用ansible playbook安装。所有配置设置都是参数化的,并且这些参数在任何适当的地方使用,包括WordPress配置文件和填充MySQL docker安装期间root密码之类的环境变量。这是我配置相关数据库的地方:

WordPress配置:

这分为两部分,其中我将包括相关部分。在我的ansible playbook中,此代码设置了WordPress表和用户(成功):

- name:             Create WordPress database
  mysql_db:
    name:           '{{ wp_db_name }}'
    state:          present
    login_user:     root
    login_password: '{{ mysql_root_password }}'
    login_host:     '{{ docker_mysql_ip }}'

- name:             Create WordPress database user
  mysql_user:
    name:           '{{ wp_db_user }}'
    password:       '{{ wp_db_password }}'
    priv:           '{{ wp_db_name }}.*:ALL'
    state:          present
    login_user:     root
    host:           '{{ docker_gateway_ip }}'
    login_password: '{{ mysql_root_password }}'
    login_host:     '{{ docker_mysql_ip }}'

相关的 wp-config.php:

define('DB_NAME', 'wordpress');
define('DB_USER', '{{ wp_db_user }}');
define('DB_PASSWORD', '{{ wp_db_password }}');
define('DB_HOST', '{{ docker_mysql_ip }}');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

当我导航到wp-admin时,特定问题声明为“Warning: mysql_connect(): Permission denied in /srv/wordpress/wp-includes/wp-db.php on line 1473”,标题为“建立数据库连接时出错”,状态代码为500。

令人困惑的部分

当我检查wp-config.php文件时,用户名,密码和数据库名称都是完全一样的。当我将wp-config.php中的主机,用户和密码复制/粘贴到命令行中的相应位置(例如mysql -u wordpress -p -h 172.17.0.2)时,我可以连接,以及查看Wordpress数据库。

总结

使用命令行时,MySQL能够正常连接,但Wordpress无法正常连接。我对Wordpress或PHP也不是很熟悉,所以对于与问题相关的日志的任何想法都可以理解。

1 个答案:

答案 0 :(得分:0)

我刚刚在使用MariaDB的Debian 9.1上遇到过这个问题,但在Oracle MySQL中这应该是相同的。我可以从命令行轻松登录,但PHP无法访问数据库。

我花了几分钟才弄明白,但我记得以前我曾经在一台旧服务器上使用Arch Linux(顺便说一句愚蠢的想法),需要命令mysql_secure_installation来获取它接受联系。

尝试一下,这对我有用。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
相关问题