首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL服务器已经消失,阻碍了大型转储的导入。

问MySQL服务器已经消失,阻碍了大型转储的导入。
EN

Database Administration用户
提问于 2011-09-01 09:59:50
回答 5查看 47.1K关注 0票数 14

我正在尝试将一个大型sql转储(2GB)导入到我的mac上的本地mysql。过去我已经能够这样做了(我使用了MAMP),但是现在我在第7758行得到了一个错误2006 (HY000):每当我试图导入转储时,MySQL服务器都会消失。数据库包含无害数据库表。

我尝试将my.cnf重型-4G.cnf文件复制到我的my.cnf中,看看这些设置是否有用,但没有结果。

有什么要调整的主意吗?

我正在使用"Mac OS x ver.10.6 (x86,64位),DMG存档“从这里:http://dev.mysql.com/downloads/mysql/。

EN

回答 5

Database Administration用户

发布于 2011-09-01 21:42:29

MySQL连接的无声杀手之一是MySQL数据包。即使是MySQL复制的I/O线程也可能因此而受害。

根据MySQL文档

  • 如果向服务器发送不正确或过大的查询,也可以获得这些错误。如果mysqld接收到的数据包太大或出现故障,它会假设客户端出了问题并关闭了连接。如果需要大查询(例如,如果使用大BLOB列),可以通过设置服务器的max_allowed_packet变量(默认值为1MB )来增加查询限制。您还可能需要增加客户端的最大数据包大小。有关设置数据包大小的更多信息,请参见第C.5.2.10节,“包太大”。。
  • 插入或替换插入大量行的语句也会导致这类错误。这些语句中的任何一条都会向服务器发送单个请求,而不考虑要插入的行数;因此,通常可以通过减少每次插入或替换发送的行数来避免错误。

至少,您必须确保mysqldump来自的机器和正在加载的机器的数据包大小是相同的。

你可以采取两种方法:

方法#1 :使用--跳过-扩展-插入

执行mysqldump

这将确保MySQL数据包不会被多个BLOB、文本字段淹没。这样,SQL插入一次只执行一个。主要的缺点是

  1. mysqldump要大得多
  2. 重新加载这样的转储需要花费更长的时间。

方法2:增加最大值_允许的_封包

这可能是首选的方法,因为实现这只是mysql重新启动。了解MySQL数据包是什么可以澄清这一点。

根据“了解MySQL内部结构”(ISBN 0-596-00957-7)第99页的说法,以下是第1-3段的解释:

MySQL网络通信代码是在假定查询总是相当短的前提下编写的,因此可以将查询发送到服务器,并由服务器在一个块中进行处理,这在MySQL术语中称为数据包。服务器为一个临时缓冲区分配内存以存储数据包,并且它的请求足够满足它的需要。这种架构需要一种预防措施,以避免服务器耗尽内存--限制数据包的大小,这个选项实现了这一点。有关此选项的相关代码可在sql/net_serv.cc中找到。看看my_net_read(),然后按照对my_real_read()的调用,特别注意net_realloc()。这个变量还限制了许多字符串函子的结果的长度。有关详细信息,请参阅sql/field.cc d.cc和sql/intem_STFIC.cc。

根据这一解释,批量插入将很快加载/卸载MySQL数据包。特别是当max_allowed_packet太小而无法满足给定的数据负载时尤其如此。

结论

在大多数安装MySQL时,我通常将其设置为256米或512米。当数据加载产生"MySQL已经消失“的错误时,您应该体验更大的值。

票数 16
EN

Database Administration用户

发布于 2011-09-01 13:06:33

这需要多长时间才能超时?第一步将检查wait_timeout和interactive_timeout设置,以确保它们足够大以供您导入:

代码语言:javascript
复制
SHOW VARIABLES LIKE '%_timeout';
SET SESSION wait_timeout=28800;

默认设置为8小时(28800小时),因此这可能不是问题所在。这一问题的其他迹象可以找到这里。其中一个突出之处是:

在不同主机上运行的客户端应用程序不具有从该主机连接到MySQL服务器所需的特权。

先验证权限,然后再查看潜在问题的列表。

票数 2
EN

Database Administration用户

发布于 2011-09-02 08:43:14

是的,通常使用wait_timeout和max_allowed_packets可以让我避开错误信息。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/5292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档