“建立数据库连接时出错” MySQL / MariaDB错误

2020年12月31日19:40:28 发表评论 61 次浏览

介绍

了解MySQL / MariaDB错误"建立数据库连接错误"或"无法连接到数据库服务器", 以及如何解决此错误。

确保MySQL正在运行

如果MySQL停止运行, 脚本和网站将无法连接。在Linux服务器上, 可以使用以下命令查看MySQL是否正在运行:

ps -aux | grep mysql

这将返回名称中带有" mysql"的正在运行的进程的列表。该列表将包含你刚运行的命令。如果MySQL正在运行, 它将也包含MySQL进程。

运行MySQL进程

如果MySQL / MariaDB未运行, 则只会看到grep命令已列出。

使用以下命令启动MySQL / MariaDB:

  • CentOS 7(MariaDB):systemctl启动mariadb
  • Ubuntu和Debian(MySQL):服务mysql启动or/etc/init.d/mysqld开始

确保为你的MySQL用户使用正确的用户名和密码。这些与你的notlogy登录凭据不同。创建MySQL数据库时, 将设置所需的用户名和密码。

你还需要设置正确的主机名。

从命令行验证数据库连接

一旦知道MySQL / MariaDB正在运行, 下一步就是使用以下命令从命令行连接:

mysql -u root -p

应该提示你输入MySQL的root用户密码。默认情况下, MySQL根用户的密码与服务器的原始根密码相同。 (注意:如果你更改根服务器用户的密码, 则不会更改MySQL根用户的密码。)

输入密码后, 你应该会发现自己在MySQL / MariaDB客户端中, 该客户端应如下所示:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4172
Server version: 5.5.44-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

如果你在使用其他用户名和密码建立MySQL连接时遇到问题, 请再次进行此测试, 以替换根与其他用户名。

如果不是登录到客户端, 而是出现以下错误:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

你没有输入正确的用户名密码。验证用户名和密码的拼写是否正确。请注意, 用户名区分大小写-根与...不同根.

验证MySQL用户名

值得检查以确保用户名使用正确的拼写和大小写。要列出所有MySQL / MariaDB用户, 请以以下身份登录到命令行客户端根使用命令:

mysql -u root -p

接下来, 使用以下命令列出所有MySQL用户及其主机:

select host, user from mysql.user;

这将向你显示与创建时完全相同的用户名, 以及允许其连接的位置(主机)。

重置用户的MySQL密码

警告注意:使用此命令时, 请务必谨慎, 特别是在重置MySQL根用户密码时。

要重置用户的MySQL / MariaDB密码, 请以以下身份登录到命令行客户端根使用命令:

mysql -u root -p

接下来, 使用以下命令重置用户密码:

update mysql.user set password = MD5('(new_password)') where user = "jdoe";

更换新密码使用新密码, 以及do使用用户名。

确保用户具有正确的特权

如果确定用户名和密码正确, 则问题可能出在用户对该数据库没有正确的特权(授予)。

要检查用户的特权(授予), 请以以下身份登录到命令行客户端根使用命令:

mysql -u root -p

接下来, 使用以下命令显示用户的授权:

show grants for 'jdoe'@'localhost';

更换do使用用户名。如果适用, 请更改本地主机主机名。

你应该获得用户具有相关数据库特权的列表。它看起来应该像这样:

+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jdoe'@'localhost' IDENTIFIED BY PASSWORD '*CD2BAEA88178935C438649F12126752DB1B24D7B' |
| GRANT ALL PRIVILEGES ON `example_database`.* TO 'jdoe'@'localhost'                                            |
+-----------------------------------------------------------------------------------------------------------------------+

请注意, 该用户对名为的数据库具有所有特权example_database.

如果未向用户授予任何数据库的特权, 则只会看到类似以下内容的信息:

+-------------------------------------------------------------------------------------------------------------+
| Grants for jdoe@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jdoe'@'localhost' IDENTIFIED BY PASSWORD '*00E247AC5F9AF26AE0194B41E1E769DEE1429A29' |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

请注意, 此用户只有用法特权"。", 并且没有任何数据库特权。

验证来自Web的数据库连接

使用一个简单的脚本来测试你的数据库是否将接受连接。创建一个名为数据库连接测试.php具有以下内容:

<?php
$test_connect = mysql_connect('localhost', 'root', 'password');
if (!$test_connect) {
die('Could not connect: ' . mysql_error());
}
echo 'Successful database connection.';
mysql_close($test_connect);
?>

替换单词密码使用你的root MySQL用户密码。

将此文件放在你的Web目录中, 然后在浏览器中访问它。如果你能够使用root用户名和密码进行连接, 那么你就知道数据库正在接受连接。

如果你在使用其他用户名和密码建立MySQL连接时遇到问题, 请再次进行此测试, 以替换根与其他用户名和密码与密码。

警告:完成测试后, 请确保删除此文件。

检查MySQL主机名

如果脚本与MySQL数据库托管在同一台服务器上(例如你的Linux云服务器), 则主机名是本地主机默认。

要仔细检查MySQL主机名, 请以以下身份登录命令行客户端根使用命令:

mysql -u root -p

接下来, 使用以下命令显示主机名:

SHOW VARIABLES WHERE Variable_name = 'hostname';

如果你的脚本正在访问远程数据库, 则主机名将是该数据库的URL。

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: