MySQL卡在“上”;“分类修理”;(启用关键点)
我有一个更新localhost的脚本,然后将更新的结果转储到remotehost:MySQL卡在“上”;“分类修理”;(启用关键点),mysql,Mysql,我有一个更新localhost的脚本,然后将更新的结果转储到remotehost: mysqldump --skip-tz-utc --no-create-info --insert-ignore --host=localhost -u u -ppass db table --where=\"timeStamp > FROM_UNIXTIME( $time )\" | mysql -h remote -u u -ppass db 有20条记录,对localhost的更
mysqldump --skip-tz-utc --no-create-info --insert-ignore --host=localhost -u u -ppass db table --where=\"timeStamp > FROM_UNIXTIME( $time )\" | mysql -h remote -u u -ppass db
有20条记录,对localhost的更新非常快(几秒钟),但对remotehost的转储要花费4分钟以上……当我查看mysql workbench时,它说远程主机的状态是“通过排序修复”,信息列是“/*!40000 ALTER TABLE‘TABLE’ENABLE KEYS*/”
这条消息是什么意思(为什么要花这么长时间才能转储到记录如此之少的remotehost)
谢谢
mysqldump
正在禁用索引、插入记录并重新启用索引。这意味着它会影响整个表,包括基于时间的更多记录
将
--skip disable key
添加到mysqldump
的参数中,这应该会停止。在重新加载期间,mysqldump
命令将对表执行三项操作:
禁用按键
李>
启用按键
李>
禁用键时,实际上会禁用非唯一索引
主键和唯一键会立即加载
一旦启动启用键,所有非唯一索引都将使用“排序修复”生成
如果您绕过禁用键
和启用键
,情况会变得更糟,因为主键、唯一键和非唯一键都是逐行构建的,这在MySQL内部是一个更混乱的操作
由于添加的数据太少,所以按照“独裁”的建议执行--跳过禁用键
,既明智又简洁
顺便说一句,这只适用于MyISAM表。InnoDB忽略
禁用键
和启用键
取决于您是否更改触发器并需要备份它们。我从你的使用模式猜测跳过触发器是有意义的,但你必须亲自查看它的详细信息才能确定。我想你更让我困惑了……你说如果我绕过禁用键,我会让事情变得更糟,但请在1段后告诉我这样做。我已经实现了专制的解决方案……这就是我应该做的吗?如果将大量行加载到一个包含许多索引的空表中,情况会更糟。通过先禁用键,然后在最后启用键,可以优化构建索引的过程,特别是在插入空表的大量行上构建索引的过程(在末尾一次完成,并且没有其他数据需要担心)。但是,假设您将一行插入到1亿行中,动态地为该行重新平衡索引比删除它并从头开始创建索引更有效。。。我想反正就是这样;-)