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

我有一个Wordpress(php-fpm / nginx)服务器,完全新鲜。 在CentOS上运行。 我也有一个docker的容器,从香草mysql服务器的图像build成。

MySQLconfiguration

它运行在3306端口上,所有的MySQL用户都是在主机172.17.0.1 (例如root@172.17.0.1 )上注册的,这是docker的网关IP。 docker集装箱安装使用一个ansible剧本。 所有的configuration设置都是参数化的,并且这些参数在任何适当的地方都可以使用,包括WordPressconfiguration文件和在MySQL docker安装过程中填充root密码之类的东西的环境variables。 这里是我configuration相关数据库的地方:

WordPressconfiguration:

这是两部分,其中我将包括相关的。 在我可靠的手册中,这段代码设置了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 ”,标题为“build立数据库连接时出错” ,状态码500。

令人困惑的部分

当我检查wp-config.php文件时,用户名,密码和数据库名称都完全按照它们的样子。 当我从命令行(例如mysql -u wordpress -p -h 172.17.0.2 )将wp-config.php的主机,用户和密码复制/粘贴到它们各自的位置mysql -u wordpress -p -h 172.17.0.2 ,我可以连接以及查看WordPress的数据库。

总结一下

当使用命令行时,MySQL能够正确连接,但是Wordpress无法连接。 我也不是很熟悉WordPress或PHP,所以任何有关问题日志的想法可能位于将不胜感激。

我刚刚在Debian 9.1上使用MariaDB遇到了这个问题,但这应该与Oracle MySQL相同。 我可以从命令行轻松login,但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! 
Interesting Posts