gpt4 book ai didi

php - 为什么 mysql CLI 可以连接,而 WordPress 却不能?

转载 作者:IT老高 更新时间:2023-10-28 21:40:38 26 4
gpt4 key购买 nike

我有一个全新的 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(): Permission denied in/srv/wordpress/wp-includes/wp-db.php在第 1473 行”,标题为“建立数据库连接时出错”,状态码 500。

令人困惑的部分

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

总结一下

使用命令行时 MySQL 可以正常连接,但 Wordpress 不能。我对 Wordpress 或 PHP 也不是很熟悉,因此对于与问题相关的日志可以位于何处的任何想法将不胜感激。

最佳答案

我刚刚在使用 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!

关于php - 为什么 mysql CLI 可以连接,而 WordPress 却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44685984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com