修复常见 MySQL 错误的有用提示
MySQL 是 Oracle 旗下广泛使用的开源关系数据库管理系统 (RDMS)。多年来,它一直是基于网络的应用程序的标准选择,并且与其他网络平台相比仍然很受欢迎。
MySQL 是针对 Web 应用程序设计和优化的 – 它在 Facebook、Twitter、Wikipedia、YouTube 等主要 Web 应用程序中发挥着关键作用。
MySQL 是否为您的数据库提供支持?在这篇综合文章中,我们将解释如何解决 MySQL 数据库服务器中的常见问题和错误。我们将讨论如何确定问题的原因以及如何解决它们。
1. 无法连接本地MySQL服务器
MySQL 中最常见的客户端-服务器通信错误之一是\ERROR 2002 (HY000): Cannot connect to the local MySQL server via socket '/var/run/mysqld/mysqld.sock'(2)”。”。
此错误表明(mysqld)
主机系统上没有运行 MySQL 服务器,或者您在尝试连接到服务器时指定了不正确的 Unix 套接字文件名或 TCP/IP 端口。
mysqld
通过使用 grep 命令检查数据库服务器主机上指定的进程来验证服务器是否正在运行,如图所示。
$ ps 的 | mysqld | grep mysqld | grep -v mysqld mysqld
如果上述命令没有显示结果,则数据库服务器未运行。因此,客户端无法连接。要启动服务器,请运行以下 systemctl 命令。
$ sudo systemctl 启动 mysql$ sudo systemctl start mysqld # RHEL / CentOS / Fedora
要验证 MySQL 服务的状态,请使用以下命令。
$ sudo systemctl status mysql #Debian/Ubuntu$ sudo systemctl status mysqld # RHEL / CentOS / Fedora
从发出上述命令来看,MySQL服务失败。在这种情况下,您可以尝试重新启动并再次检查其状态。
$sudo systemctl 重新启动 mysql$sudo systemctl 状态 mysql
另外,如果服务器按照以下命令运行,但仍然出现上述错误,则还必须验证是否有任何防火墙或网关服务器阻止了 TCP/IP 端口......
$ ps 的 | mysqld | grep mysqld | grep -v mysqld mysqld
得到netstat命令如图所示。
$ sudo netstat -tlpn | sudo netstat -tlpn grep “mysql”
2. 无法连接MySQL服务器
另一个常见的连接错误是“(2003) Can't connect to MySQL server on 'server' (10061)”,表示网络连接被拒绝。
此时,首先检查系统上是否有 MySQL 服务器正在运行,如上所示。另请确保服务器已启用网络连接,并且您用于连接的网络端口是服务器上配置的网络端口。
尝试连接 MySQL 服务器时可能遇到的其他常见错误包括:
错误 2003:无法连接到“host_name”上的 MySQL 服务器 (111)错误 2002:无法通过套接字“/tmp/mysql.sock”连接到本地 MySQL 服务器(111)
这些错误表明服务器可能正在运行,但是您正在尝试使用与服务器正在侦听的端口、命名管道或 Unix 套接字文件不同的 TCP/IP 端口、命名管道或 Unix 套接字文件进行连接。
3. 在 MySQL 中获取拒绝错误
在 MySQL 中,用户帐户是根据用户名和用户可以连接到服务器的客户端主机来定义的。此外,帐户还可能具有密码等凭证。
虽然导致“拒绝访问”错误的原因有很多,但最常见的原因之一是服务器允许客户端应用程序在连接时使用的 MySQL 帐户。表示在连接上指定的用户名无权访问数据库。
MySQL 允许创建帐户,使客户用户能够连接到服务并访问由服务管理的数据。在这种情况下,如果您遇到登录被拒绝错误,请检查是否允许用户帐户通过您正在使用的业务协议连接到服务器,并可能检查连接来源的主机。
SHOW GRANTS
您可以使用所示命令查看给定帐户的权限。
> 显示 'howtoing'@'localhost' 的资助;
您可以使用 MySQL 堆栈中的以下命令向特定站点上的特定用户授予远程 IP 地址的权限。
> 将 *.test_db 的所有权限授予 'howtoing'@'192.168.0.100';> 同花顺特权;
此外,连接到 MySQL 的问题也可能导致访问被拒绝错误,请参阅前面解释的错误。
4. 失去与 MySQL 服务器的连接
您可能会因以下原因之一遇到此错误:网络连接不良、连接超时或 BLOB 值大于 max_allowed_packet 的问题。如果存在网络连接问题,请确保网络连接良好,尤其是当您要访问远程数据库服务器时。
如果是连接超时问题,特别是当MySQL尝试使用主连接到服务器时,请增加connect_timeout参数的值。但是,对于大于 max_allowed_packet 的 BLOB 值,您必须在 /etc/my.cnf 配置文件的[mysqld]
or[client] te.
字段中为 max_allowed_packet 设置更高的值,如下所示。
[mysqld]连接超时= 100最大允许数据包 = 500M
如果您没有 MySQL 配置文件,则可以在 MySQL 驱动程序中使用以下命令设置此值。
> 设置全局 connect_timeout=100;> 设置全局 max_allowed_packet=524288000;
5. MySQL连接过多
如果MySQL客户端遇到“连接数太多”错误,则意味着所有可用连接都被其他客户端使用。连接数(默认为151)由系统更改控制;可以通过增加其值来解决max_connections
问题我在 /etc/my.cnf 配置文件中允许多个连接。
[mysqld]最大连接数=1000
6.退出内存MySQL
如果您使用 MySQL 客户端应用程序运行查询并遇到相关错误,则意味着 MySQL 没有足够的内存来存储整个查询结果。
第一步是确保问题有效,如果有效,则执行以下操作:
- 的
如果您直接使用 MySQL 客户端,请以
--quick switch
, 开头以禁用缓存对象或使用 MyODBC 驱动程序时,配置用户界面 (UI) 有一个标准标志选项卡。请参阅“不保存结果”。
的
另一个很棒的工具是 MySQL Tuner——一个很好的脚本,可以连接到正在运行的 MySQL 服务器,并提供有关如何配置它以获得最佳性能的提示。
$ sudo apt-get install mysqltuner #Debian/Ubuntu$ sudo yum install mysqltuner #RHEL/CentOS/Fedora$mysqltuner
有关 MySQL 优化和性能技巧,请阅读我们的文章:15 个有用的 MySQL/MariaDB 部署设计和性能技巧。
7. MySQL 继续扩展
如果遇到此问题,您应该尝试确定问题是否是 MySQL 服务器已死机,或者是否是客户端出现问题。请注意,许多服务器崩溃是由损坏的数据文件或索引文件引起的。
您可以检查服务器的状态以验证它已启动并运行了多长时间。
$ sudo systemctl status mysql #Debian/Ubuntu$ sudo systemctl status mysqld # RHEL / CentOS / Fedora
或者,运行以下 mysqladmin 命令来查找 MySQL 服务器运行时。
$sudo mysqladmin 版本 -p
其他解决方案包括但不限于停止MySQL服务器并启用调试,然后重新启动服务。您可以尝试创建一个可用于复制问题的测试用例。此外,在执行其他查询时,打开另一个终端窗口并运行以下命令来显示 MySQL 进程统计信息:
$sudo mysqladmin -i 5 状态或者$sudo mysqladmin -in 5 -r 状态
虽然我们已经研究了一些常见的 MySQL 问题和错误,并提供了排查和解决问题的方法,但错误诊断最重要的方面是理解它的含义(就导致它的原因而言)。
那么你怎么知道这一点呢?以下提示将指导您如何准确找出导致问题的原因:
- 的
第一步也是最重要的一步是查看存储在文件夹中的 MySQL 文档
/var/log/mysql/
。您可以使用命令行工具(例如 tail)来读取日志文件。如果MySQL服务无法启动,请使用systemctl检查其状态,或者使用systemd下的journetctl(带
-xe
标志)命令来检查问题。您还可以查看类似
/var/log/messages
或类似的配置日志文件来了解问题的原因。尝试使用 htop 等工具来检查哪个程序占用了所有 CPU 或关闭计算机,或者检查内存、磁盘空间、文件记录或任何其他重要资源是否耗尽。
假设问题是一个逃逸进程,你总是可以尝试杀死它(使用pkill或kill工具),以便MySQL正常工作。
假设 mysqld 服务器引起问题,您可以运行命令:
mysqladmin -u root ping
或mysqladmin -u root processlist
来获取它的任何响应。 的一部分如果问题出在您的客户端应用程序尝试连接到 MySQL 服务器时,请确定其无法正常工作的原因,并尝试从中获取任何结果以进行故障排除。
您还可以阅读以下有关 MySQL 的文章:
- 的
初学者学习 MySQL/MariaDB – 第 1 部分
如何在 CentOS 7 上使用 Netdata 监控 MySQL/MariaDB 数据库
如何将所有 MySQL 数据库从旧服务器转换为新服务器
Mytop – 在 Linux 中监控 MySQL/MariaDB 性能的有用工具
Linux 的 12 个 MySQL/MariaDB 安全最佳实践
有关更多信息,请参阅 MySQL 常见问题和错误参考手册,它提供了使用 MySQL 时可能遇到的常见问题和错误消息的完整列表,包括上面讨论的问题和其他问题。