【问题标题】:How do I troubleshoot not being able to connect to MySQL?如何解决无法连接到 MySQL 的问题?
【发布时间】:2015-07-17 12:54:48
【问题描述】:

多年来,运行 MySQL 的 Linux 虚拟机一直表现出色。这是一台用于在将网站更改推送到真实网站之前测试网站更改的机器。我们的现场站点由一家托管公司托管,并得到了很大的支持,但我们的开发站点由一个几乎不知道任何 Linux 等的菜鸟(我)在我们的办公室托管和维护。

前几天,当我在开发机器上测试网站的一些更改时,我注意到它无法连接到数据库。我只是从备份中恢复,但当然我从未实施过备份过程,因为我认为我不需要它,因为它只是一个开发盒。所以现在我要么必须修复 MySQL,要么从头开始重新启动开发站点,这让我花了一段时间才弄好上次。

因此,我们网站 (php) 上的每个页面都以包含/运行代码以连接到数据库的行开头。这就是我第一次注意到这个问题的原因,因为每个页面看起来都很混乱,并且在浏览器中进入页面源并且每个页面的顶部都是“MySQL 登录错误”。在<html> 标签之前。我尝试重新启动服务器,它做同样的事情。我做了一个“ps aux | less”,发现:

/usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --socket=/var/lib/mysql/mysql.sock

这告诉我它正在运行。我也无法使用 MySQL 工作台进行连接。为什么组织中没有其他人会接触到的 Linux 机器会突然停止允许 MySQL 连接? MySQL 标准端口在我们的防火墙上是开放的,但我们使用带有强密码的原始用户名,所以我认为它是安全的。

【问题讨论】:

  • 服务器是否空间不足?检查 mysql 日志以查看任何错误。
  • 你能从同一台服务器上的命令行连接吗?运行df -h 看看是否有可用空间
  • 尝试重启虚拟机,或者如果可以的话,重启虚拟机主机。
  • @halfer 这将是一个 Windows 解决方案。无需在这里重新启动任何东西。实际上,最好不要重新启动,因为如果服务器被黑客入侵,重新启动可能会产生新的问题并且证据可能会丢失。
  • 在 VM 驱动器仍在运行时对其进行克隆,然后重新启动 - 除非您认为 RAM 中可能仍存在某些问题?你有任何理由怀疑黑客入侵吗?

标签: php mysql linux centos


【解决方案1】:

如果可能,尝试以 root 身份从命令行连接 mysql。如果在 mysql 中定义了 root 用户,那么您可能需要一个密码,但没有设置密码,我认为您可以以 root 身份登录,然后从交互式 mysql 会话中授予权限。下图是这样的,还有一个重置密码的过程,如果风险太大我可以为你做: https://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

root@grapevine:~# mysql 欢迎使用 MySQL 监视器。命令以 ; 结尾或\g。 您的 MySQL 连接 ID 是 105 服务器版本:5.5.43-0ubuntu0.14.04.1(Ubuntu) 版权所有 (c) 2000, 2015,Oracle 和/或其附属公司。版权所有。 Oracle 是 Oracle Corporation 和/或其 附属公司。其他名称可能是其各自的商标 拥有者。 输入“帮助”;或 '\h' 寻求帮助。键入 '\c' 以清除当前输入语句。 mysql> 显示数据库; +----------+ |数据库 | +----------+ |信息架构 | |多利巴| | drupal7 | | mysql | |性能模式 | | secretbe_drupalmain | +----------+ 6 行一组(0.00 秒) mysql>

【讨论】:

  • 我认为让 OP 适应接受陌生人的帮助(要求他们泄露访问凭据)并不是一个好主意。此外,这里的答案适用于所有未来的读者,而不仅仅是 OP - 我不认为你愿意帮助任何阅读这篇文章的人:-)
  • "尝试以 root 身份从命令行连接 mysql" 有什么意义? MySQL 不关心调用它的用户 - 它只是将它作为默认用户名。所以你也可以像普通用户一样做mysql -u root 并达到同样的效果。
【解决方案2】:

在 mysql-server 上检查是否有东西在该端口上监听:

netstat -tlpn  | grep 3306

(3306是默认端口,但你可以检查是否使用其他端口:grep port /etc/mysql/my.cnf

如果可行,请尝试在该 mysql 机器上进行本地连接。

mysql -u username -p --host=127.0.0.1 --port=3306

(它现在应该要求输入密码。)

如果您已登录,请执行此操作以检查当前的 mysql 连接:

mysql> SHOW STATUS WHERE `variable_name` = 'Threads_connected' 

它应该返回一些值。数据库有连接限制;如果您的应用程序没有正确关闭连接,这可能是您无法建立新连接的原因。

现在检查端口是否可以从 VM 访问,一个快速的方法是这个技巧: curl -I 192.168.1.100:3306(将 ip 替换为您的数据库 IP)。它应该返回一些包含 '...../_o3mysql_native_password' 的奇怪错误消息。至少你现在知道 mysql 在那个端口后面并且你可以访问。

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2019-07-07
    • 2018-08-02
    • 1970-01-01
    • 2013-08-29
    • 2019-08-22
    • 2011-04-01
    • 2019-04-23
    • 1970-01-01
    相关资源
    最近更新 更多