如何修复WordPress“建立数据库连接时出错”
这个问题很容易解决。
只有2个步骤:
1)、获取详细的错误消息;
2)、解决错误消息指出的问题。
因此,请忽略你到目前为止已收到的所有建议。
没有过多复杂的设置步骤…
只有2步…,发现更多…,解决问题。
开始更改数据库凭据,修复数据库,恢复默认的WordPress文件等等。所有这些弹枪技术都不太可能奏效。当检测汽车中的引擎灯亮起时,你是否只是开始更换零件?当然不是!你将诊断代码带到白炽灯后面(由于某种原因,它们被称为白痴灯),并进行相应的处理。同样的方法在这里适用。
步骤1:获取详细的错误消息
为此,你将需要在站点的根目录中修改wp-config.php
找到这条…
define( 'WP_DEBUG', false );
并将其更改为
define( 'WP_DEBUG', true );
现在重新启动站点,你将看到详细的错误消息。
步骤2:解决错误消息指示的问题
就像检测汽车中的引擎灯一样,任何大量问题都可能导致WordPress白炽灯亮起。在下面,你会找到可能的错误消息和指出的修复程序的列表。此列表绝不是详尽无遗的。
问题1:需要SSL连接
Warning: mysqli_real_connect(): (HY000/9002): SSL connection is required.
Please specify SSL options and retry.
in /home/site/wwwroot/wp-includes/wp-db.php on line 1635
SSL connection is required. Please specify SSL options and retry.
这是我的网站的问题。我正在使用MySQL中用于Azure的数据库在Web应用程序中将WordPress部署到Azure。MySQL for Azure需要安全连接,默认情况下WordPress使用未加密的连接。
解决此问题的方法是将以下代码行添加到wp-config.php中。
define ( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
这个问题是为什么你需要获取详细的错误消息的一个很好的例子。你可以搜索数百个声称知道如何解决WordPress数据库连接问题的答案,但从未找到此问题。如果没有详细的错误消息,你将需要花几天时间才能完全放弃。
问题2:主机名错误或DNS查找问题
Warning: mysqli_real_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: No such host is known.
in D:\rundle\WordPress\wordpress-5.5.3\wordpress\wp-includes\wp-db.php on line 1635
php_network_getaddresses: getaddrinfo failed: No such host is known.
这意味着你提供的主机名的DNS查找失败。这可能是因为主机名拼写错误,或者可能意味着你的站点使用的DNS服务器没有该主机的条目。解决拼写错误很容易。另一个问题比较难,但是至少你可以与知道如何解决DNS查找问题的人员进行明智的讨论。
检查wp-config.php中的拼写错误。
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
问题3:数据库未运行或不可访问
Warning: mysqli_real_connect(): (HY000/2002): No connection could be made because the target machine actively refused it.
in D:\rundle\WordPress\wordpress-5.5.3\wordpress\wp-includes\wp-db.php on line 1635
No connection could be made because the target machine actively refused it.
这意味着你的数据库无法访问,它可能没有运行。可能存在防火墙问题,默认端口可能已更改,有很多事情要研究,但是问题已经大大缩小了。
问题4:无效的用户名
Warning: mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client
in D:\home2\newsitefile\public_html\wordpress\wp-includes\wp-db.php on line 1635
The server requested authentication method unknown to the client
此隐秘消息表示未定义用户。使用任何一组凭据,WordPress都会在放弃之前尝试一些身份验证方法。WordPress假定凭据是有效的,但是根本没有定义正确的身份验证方法。
在wp-config.php中检查用户名…
/** MySQL database username */
define( 'DB_USER', 'username_here' );
问题5:无效的密码
Warning: mysqli_real_connect(): (HY000/1045): Access denied for user 'wpuser'@'localhost' (using password: YES)
in D:\home2\newsitefile\public_html\wordpress\wp-includes\wp-db.php on line 1635
Access denied for user 'wpuser'@'localhost' (using password: YES)
你的MySQL数据库密码错误。在这种情况下,用户名是wpuser。在wp-config.php中检查密码…
/** MySQL database password */
define( 'DB_PASSWORD', 'password_here' );
问题6:数据库名称错误或数据库不存在或用户无权访问
Access denied for user 'wpuser'@'localhost' to database 'wpbench2'
这意味着数据库名称错误或不存在。WordPress可以从一个空的数据库创建数据库表,但是它不能创建数据库本身。
在wp-config.php中检查数据库名称…
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wpbench2 );
如果名称正确,则需要使用MySQL Bench之类的工具登录数据库,以查看架构是否存在。
如果存在该架构,则下一个要确定的问题是你的数据库用户是否有权访问该架构。
拥有所有架构特权,WordPress站点将能够从一个空架构创建所有表。不允许所有特权授予数据库用户,
但是,如果数据库最初是空的,那么你将需要更多特权,而架构已正确初始化。确定所需的最小特权集是另一篇文章的主题。
最后…
因此,一旦你的网站正常运行并从?移至?,就很容易忘记所有内容并继续前进。可是等等!在此之前,你需要关闭诊断程序…
在wp-config.php中,更改…
define( 'WP_DEBUG', true );
回到
define( 'WP_DEBUG', false );
有一个原因,默认情况下,WordPress不提供详细的错误消息。这是因为错误消息可能会显示敏感信息,例如服务器名称和用户名称,这些信息可能会危害你的系统。
因此,在你建立连接后开始工作…,请重新开启白炽灯!
但当遇到以下问题时可以用此方法解决!
Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /private/tmp/wordpress/wp-includes/wp-db.php on line 1452
近期,频繁遇到这个错误 – 你是否检查过wp-config.php指定的架构?
就我而言,我将完全忘记创建它,因此此修复就像创建CREATE DATABASE wordpress一样简单。
当wp-config.php数据库主机错误时,我也遇到了此错误(尝试交换localhost
到 127.0.0.1
)。
首先,请确保MySql实际上正在运行。如果进程尚未启动,则不会创建套接字文件。
netstat -tulpn | grep MySQL
或者
ps -e | grep MySQL
如果MySql正在运行,则可以将wp-config.php中的数据库主机从localhost更改为127.0.0.1,但这只是一种解决方法。
当你指定localhost时,mysqli_real_connect()函数尝试通过它找不到的Unix套接字连接到数据库(因此出现“ no such file”错误。)当你指定127.0.0.1时,它将尝试使用默认的TCP端口(通常为3306)可以正常工作。
那不能解决PHP不知道在哪里可以找到MySql套接字的问题。你需要在php.ini中配置以下选项。套接字的位置将根据你的操作系统而有所不同,但是通常可以通过运行locate mysql.sock来找到它。这是在CentOS 6.8上对我有用的设置。
php.ini
pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock
其他系统通常使用/tmp/mysqld.sock。你可以通过检查MySql配置文件my.cfg来验证配置的位置。
将PHP配置为指向正确的套接字位置后,请重新启动Apache/nginx,以使它获得新的设置。
现在你可以按预期使用localhost了。