我有一个更新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的更新非常快(几秒钟),但转储到remotehost需要4分钟......当我查看mysql工作台时,它说远程主机的状态是“修复方式”排序“和Info列是”/ *!40000 ALTER TABLE'table'ENABLE KEYS * /“。
这条消息是什么意思(为什么用这么少的记录转储到远程主机需要这么长时间?)
THX
答案 0 :(得分:7)
mysqldump
禁用索引,插入记录并重新启用索引。这意味着它会影响整个表格,包括我期望的基于时间的更多记录。
将--skip-disable-keys
添加到mysqldump
的参数中,这应该会停止发生。
答案 1 :(得分:7)
mysqldump将在重新加载期间对表执行三项操作
禁用钥匙;
多个插页
ENABLE KEYS;
禁用密钥时,它实际上会禁用非唯一索引。
主键和唯一键立即加载。
启动ENABLE KEYS后,将使用“按排序修复”构建所有非唯一索引;
如果绕过DISABLE KEYS和ENABLE KEYS,你会使事情变得更糟,因为主键,唯一键和非唯一键是逐行构建的。这在内部是一个麻烦的操作,MySQL必须执行FOR A FULL LOADING OF A TABLE !!!
由于添加了如此少的数据,因此建议使用“Autocracy”这样的--skip-disable-keys既明智又简洁。
BTW这仅适用于MyISAM表。 InnoDB忽略了DISABLE KEYS和ENABLE KEYS。