2014-09-02 264 views
5

我不确定这是否应该在SuperUser中发布,因为我们正在使用Workbench中内置的迁移向导,请让我知道这个问题是否应该移动。MySQL数据库迁移缺少数据

目的
我们目前正处在从一台服务器数据库迁移到另一个,因为MySQL工作台有一个内置的叫迁移向导功能,我们认为我们将继续我们的快乐的方式迁移它的过程。我们有16种不同的数据库模式,需要以不同的大小进行迁移(最小为3 MB,最大为76 GB)。

问题
我们开始试图迁移中到大尺寸的那些坐在14.7 GB,并开始了罚款之一,但之后它已成功迁移的表的一半在那一个我们得到的错误“ MySQL服务器已经消失“。确保连接稳定并连接电缆(可能是无线信号掉线?)并确保完全权限并使用root用户进行迁移后,我们仍然得到“服务器已经消失”的错误。

然后我们尝试了可以​​正常工作的小型数据库,所以我们认为这可能是一个超时问题。我们尝试删除超时设置,但对于较大的数据库,我们仍然得到相同的错误。真正的踢球手就是我们目前正在经历的。

当我们在150 MB数据库上尝试此操作时,迁移向导会正确完成迁移,而不会出现任何错误或警告。出于好奇,我跑了下面的代码

SELECT table_name AS "Table", 
round(((data_length + index_length)/1024/1024), 2) "Size in MB" 
FROM information_schema.TABLES 
WHERE table_schema = "TableName" 
ORDER BY "Table"; 

为了确保表的大小是正确的。令我们惊讶的是,源数据库中的表格总和为150 MB,但目标数据库中的总和为94 MB。

问题(S)
可能一些其他的原因是为了什么,为什么我们得到的超时溢出和特权除了“服务器已经走了”的错误?为什么迁移向导会说迁移没有任何警告或错误就成功了,但实际上只有大约60%的数据被迁移了?迁移向导是不可信的,还是不应该被信任的表大小查询?我们是否正在讨论这个完全错误的问题,即,您是否推荐另一种更稳定的数据库迁移方式?

如果需要,我很乐意提供更多信息。

编辑:
的MySQL版本:5.1.41(Ubuntu的)

我们还检查的行数在每个表中每一个模式虽然大部分是正确的,有些翻错了。这是数据不一致的地方。在150 MB/94 MB的例子中有25个表。在这25张桌子中,有23张是正确的,2张是不正确的。在源代码中,其中一个表格有257万行,但只有150万行结束于目标表中。

编辑2:
运行相同的查询再次,现在给我150 94 150 8 150 24,现在第四次迁移它整个数据库。我猜这个问题位于其他地方,但不能为我的生活找出原因。花了92分钟迁移150 MB的数据。推断,这将给我大约一个月的时间来迁移75 GB的数据库 - 显然是不正确的。

+0

这看起来像是一个计时问题,该会话或my.cnf中交互式timout和等待超时的当前值是什么?你测试设置为0(无限)吗? – 2014-09-02 13:54:29

+0

我们查看了my.cnf,但找不到任何看起来像交互式或等待超时的参数。我们在寻找什么特定的参数?感谢您抽出宝贵时间。 – MagneTism 2014-09-02 14:11:12

+0

[interactive_timeout](http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_interactive_timeout)默认为28800,即8小时。 – 2014-09-02 14:14:55

回答

0
  1. 数据库中的大小可能会有所不同,即使它包含相同的数据。在迁移时,您还要对数据进行碎片整理
  2. 我不会信任具有这么多数据的迁移向导。 MySQL不能很好地处理大量数据,如果MySQL没有以严格模式运行,插入和其他内容可能会以静默方式失败或仅在警告时失败。
  3. 如果你正在迁移一切(也包括用户和元数据),只需在两个DB都关闭的情况下复制/ rsync整个mysql_data文件夹。
+1

因为在工作时收到低优先级而不能回复您的道歉:S但现在我回来了! :)我检查了一些行数的数据,看起来在3.12百万行中,我在mysqldump迁移过程中丢失了20 000行,所以我肯定会丢失一些数据。你知道这可能是什么原因吗? – MagneTism 2014-10-02 10:34:49