我正在尝试将一个大型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/。
发布于 2011-09-01 21:42:29
MySQL连接的无声杀手之一是MySQL数据包。即使是MySQL复制的I/O线程也可能因此而受害。
根据MySQL文档
至少,您必须确保mysqldump来自的机器和正在加载的机器的数据包大小是相同的。
你可以采取两种方法:
执行mysqldump
这将确保MySQL数据包不会被多个BLOB、文本字段淹没。这样,SQL插入一次只执行一个。主要的缺点是
这可能是首选的方法,因为实现这只是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已经消失“的错误时,您应该体验更大的值。
发布于 2011-09-01 13:06:33
这需要多长时间才能超时?第一步将检查wait_timeout和interactive_timeout设置,以确保它们足够大以供您导入:
SHOW VARIABLES LIKE '%_timeout';
SET SESSION wait_timeout=28800;默认设置为8小时(28800小时),因此这可能不是问题所在。这一问题的其他迹象可以找到这里。其中一个突出之处是:
在不同主机上运行的客户端应用程序不具有从该主机连接到MySQL服务器所需的特权。
先验证权限,然后再查看潜在问题的列表。
发布于 2011-09-02 08:43:14
是的,通常使用wait_timeout和max_allowed_packets可以让我避开错误信息。
https://dba.stackexchange.com/questions/5292
复制相似问题