拒绝用户‘linuxuser’@‘localhost’访问(使用密码:否)

拒绝用户‘linuxuser’@‘localhost’访问(使用密码:否)

我的客户要求我将他的 Wordpress 网站从共享服务器移至 AWS。

AWS EC2 实例是 Ubuntu 14.04 LTS,带有 PHP 5.5.9 和 MySQL 5.5.38。旧服务器有 PHP 5.4.30 和 MySQL 5.5.42。AWS 实例上没有安装 PHPMyAdmin 和 CPanel。所以我必须使用命令来完成所有操作。

在 AWS 实例中,我以“ubuntu”用户的身份拥有 sudo 访问权限。我创建了一个新的 Linux 用户“wpsite”,并为其创建了主目录。我设法将所有文件和目录从旧服务器传输到/home/wpsite/public_html

然后我创建了一个新的数据库“WP_DB”和一个新的 MySQL 用户“wp_db_user”并授予对 WP_DB 的所有访问权限。

CREATE USER wp_db_user@localhost IDENTIFIED BY 'thepwd';
GRANT ALL PRIVILEGES ON WP_DB.* TO wp_db_user@localhost IDENTIFIED BY 'thepwd';
FLUSH PRIVILEGES;

现在,我修改了 wp-config.php 文件

define('DB_NAME', 'WP_DB');
define('DB_USER', 'wp_db_user');
define('DB_PASSWORD', 'thepwd');
define('DB_HOST', 'localhost');

然后,我使用 wp_db_user 帐户(也尝试使用 root 用户)从 sql dump 中恢复了旧的 WP 数据库。接下来,我在 Apache2 中创建了一个 vhost 配置,其中包含正确的服务器名称和别名以及目录路径,并将域的 A 记录更改为 AWS 实例。到目前为止,一切都很顺利。没有错误。

当我访问该网站时,WordPress 网站会显示出来,但问题是缺少某些内容,包括网站标题。我查看了错误日志文件,发现此错误列在多行中:

PHP Warning: mysql_query(): Access Denied for user 'ubuntu'@'localhost' (using password: no) in /home/wpsite/public_html/wp-content/themes/enterprise-pro/front-page.php on line 5

并且该行包含以下代码

$sel_home = mysql_query("select * from admin_home_page");

然后我将 WP 文件复制到本地 Ubuntu 14.04 LTS (64 位)、Apache/2.4.7、PHP 5.5.9 和 MySQL 5.5.41 中。我在日志文件中看到以下错误。

PHP Warning: mysql_query(): Access Denied for user 'www-data'@'localhost' (using password: no) in /home/wpsite/public_html/wp-content/themes/enterprise-pro/front-page.php on line 5

需要注意的是,错误消息中提到的用户不是 MySQL 用户。我是 Linux 用户。我无法确定是 Wordpress、PHP 版本、MySQL 还是 Linux 权限的问题。我也不是 Linux 专家。我已经阅读了博客和其他 Stackoverflow 问题,并完成了所有操作。

网站在旧服务器上运行良好。我也可以登录新服务器上的 WP 管理部分,它使用相同的数据库,没有任何错误。有人能告诉我我做错了什么吗?如何解决这个问题?

提前致谢。

编辑:为了进一步测试,我将 WP 文件复制到我的 Win 7 (64 位)、Apache/2.2.22 (Win32)、PHP/5.3.8 和 MySQL 5.1.37 中。一切正常。日志文件中没有错误。

答案1

你安装的wordpress是哪个版本的?

如果 >= 3.9 请阅读以下内容:

https://make.wordpress.org/core/2014/04/07/mysql-in-wordpress-3-9/

In WordPress 3.9, we added an extra layer to WPDB, causing it to switch to using 
the mysqli PHP library, when using PHP 5.5 or higher.

For plugin developers, this means that you absolutely shouldn’t be using PHP’s mysql_*() 
functions any more – you can use the equivalent WPDB functions instead.

所以基本上如果您使用的是 WP >= 3.9 并且您正在使用 PHP >= 5.5 您就无法使用 mysql_* 函数访问数据库(但这是不好的做法,它们已被弃用)。

如果您不想更改代码,您应该考虑降低 PHP 版本,或者将代码改为使用 $wpdb 对象。

最好的解决方案是使用适用于您的 WP 版本的插件(如果有)。您应该寻找插件的开发人员。

相关内容