我有一个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时,所述的具体问题是“警告:MysqL_connect():在第1473行的/srv/wordpress/wp-includes/wp-db.PHP中被拒绝”,标题为“建立数据库连接时出错”,状态代码500.
令人困惑的部分
当我检查wp-config.php文件时,用户名,密码和数据库名称都是完全一样的.当我将wp-config.php中的主机,用户和密码复制/粘贴到命令行中的各自位置时(例如MysqL -u wordpress -p -h 172.17.0.2),我可以连接,以及查看wordpress数据库.
总结一下
MysqL能够在使用命令行时正确连接,但wordpress无法连接.我对wordpress或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!