23

MySQL十种常见错误,你可犯过?

 4 years ago
source link: http://database.51cto.com/art/201910/603737.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

MySQL十种常见错误,你可犯过?

如果未能对MySQL 8进行恰当的配置,您非但可能遇到无法顺利访问、或调用MySQL的窘境,而且还可能给真实的应用生产环境带来巨大的影响。本文列举了十种MySQL常见的错误及其解决方案。

【51CTO.com快译】MySQL 8(https://dzone.com/articles/preview-top-mysql-8-features-1)是当前流行的数据库引擎之一。在得到正确配置的情况下,它能够以相对较低成本的方式,帮助成千上万的数据库连接到对应的服务器上。另外,由于它是一种在业界被使用多年的常用数据库工具,因此您不太可能会遇到某个服务器无法识别它的情况。可以说,您可以将其配置到任何自己希望处理和存储数据的应用场景之中。

当然,MySQL 8也并非是完全“开箱即用”的,如果您未能对其进行恰当的配置,您非但会遇到无法顺利访问、或正确调用MySQL的窘境,而且还可能给真实的应用生产环境带来巨大的影响。因此,在您碰到某种需要修复的MySQL错误,决定要在线搜索解决方案之前,请和我一起来看看如下十种MySQL常见错误,您是否也曾犯过呢?

错误1:拒绝访问(Denied Access)

在我们实现对数据的任何选择(SELECT)、插入(INSERT)、更新(UPDATE)、以及删除(DELETE)之前,我们都需要审查在服务器上,客户端程序所使用的数据库帐号。只有获得了连接许可、以及具有对MySQL服务器进行各种操作的相关权限,才不会出现如下图所示的“拒绝访问”之类错误。

2406c02235a55f0da5c6a50354244958.png-wh_651x-s_2533982955.png

错误2:密码为空或提示输入

如果用户端程序被配置为带有-p的选项,而在启动时却并未设置相应的密码值,那么MySQL客户端就会出现如下的提示,并会被要求输入密码:

361ec356f2566298992b7eacc7b77496.png


  1. > MySQL -u user_name -p  
  2. Enter password: 

显然,这是一个系统库层面上的问题,并非MySQL本身的错误。简单快速的解决方案是:直接将MySQL的密码更改为八位或者更短的字符。当然,您也可以将密码存储到某个备选文件中,以方便读取。

错误3:MySQL失去服务器连接

此类情况一般发生在网络环境不佳的远程连接时。我们一般可以通过打开命令行,手动尝试连接的方式,来检验当前的状况。除了对网络连接状态进行基本排查之外,您也可以尝试着通过修改MySQL的最大连接数,来诊断是否是资源受限的问题。

错误4:主机名已被阻止

如果MySQL服务器收到由某个主机的应用程序所产生的过多连接数,那么该主机就会被数据库服务器端所阻断,进而产生如下的错误:

cc53233ff32746102ce109ff1c6594ea.png

如上图所示,一旦数据库接收到太多带有“max_connect_errors”的失败请求,MySQL就会认为前端出现了错误,并立即阻断主机的进一步连接,直至有FILHES HOST语句或是mysqladmin flush-host命令的发出。可见,对于由于“host_name”被阻断的连接错误,我们需要通过“mysqladmin flush-hosts”,来解除此类阻断。

在服务器启动之前,您可以通过设置如下最大值,来处置连接中出现的错误:



  1. > mysqld_safe --max_connect_errors=10000 

当然,当服务器正在运行的时候,您也可以按照如下方式进行动态调整:



  1. mysql> SET GLOBAL max_connect_errors=10000; 

错误5:内存不足

如果MySQL的内存不足,它将无法存储来自MySQL客户端的所有查询请求,而且会在服务器端抛出如下的错误:

23ae38d55d8742bc693235c04eaa052e.png


  1. mysql: Out of memory at line 42, 'malloc.c'  
  2. mysql: needed 8136 bytes (8k), memory in use: 12481367 bytes (12189k)  
  3. ERROR 2008: MySQL client ran out of memory 

为了解决此类问题,我们必须首先检查查询语句本身是否正确。例如:我们是否确实期望通过多行结果来回应某个查询请求?如果并非如此,则需要予以纠正、或是重新调整查询的方式。如果请求本是正确的、且并不需要校正的话,我们可以选择为MySQL添加一个–quick的选项。

错误6:当出现“表已满”时

表已满(table-full)的错误一般发生在磁盘可用空间已满、以及数据表已经到达了最大容量,这两种情形之下。我们往往可以通过操作系统的设置,来检测并限制MySQL中的数据表作为单个文件的实际容量上限。

错误7:当表tbl_name不存在时

如下错误表明了:在默认数据库中,某个给定的数据表被视为不存在的情况。



  1. Table 'tbl_name' doesn't exist  
  2. Can't find file: 'tbl_name' (errno: 2) 

02e81b2698f9f2b7c906e8c031f85c6b.png

在此类情况下,用户将无法正确地引用到其对应的数据表。而导致该情况的原因在于:虽然MySQL服务器使用了目录和文件的形式来存储数据库表,但是按照操作系统的文件管理方式,数据库及其数据表的名称是会区分大小写的。

错误8:各种不同步的命令

如果以错误的顺序去调用客户端的函数,那么您可能会接收到同步错误之类的命令。这就意味着该命令不能够在客户端的代码中被执行。例如,您要执行函数--mysql_use_result()。与此同时,您又尝试去执行另一个查询--mysql_free_result(),那么系统就有可能发生此类错误。说白了,如果您要执行的两个查询,它们所返回结果集分别是各自调用函数的对方输出结果(并非MySQL的存储结果)的话,那么就会出现不同步的命令现象。

错误9:忽略用户

如果MySQL服务器在启动、或重新加载某些授权表时,发现有个用户表中的帐户带有非法密码,那么就会出现如下的错误:



  1. Found the wrong password for user 'some_user'@'some_host'; ignoring user  

93c174b5b7faf8361499b2b96c37a1c5.png

显然,为了解决此类问题,我们应该为该用户事先分配一个新的且有效密码。

错误10:无法创建/写入文件

如下的错误表明:如果在执行请求的过程中,MySQL不能在临时目录中,为某个结果集生成一个临时文件:



  1. Can't create/write to file 'sqla3fe_0.ism' 

通常的解决方案是:在启动MySQL服务器时,采用–tmpdir选项。其对应的命令如下:



  1. > mysqld --tmpdir C:/temp 

cb917638ebcfb5263b107a4f5a313486.png

结论

众所周知,在处理数据库时,居多的问题和错误都源自查询操作。上述十种MySQL的常见错误可能只是冰山的一角。您可能也能罗列出更多实践中碰到过的问题。希望上述线索和解决方案能够对您有所帮助。

原文标题:You Should Be Aware of These 10 Most Prevalent MySQL Mistakes,作者: mark dc

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 1


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK