我对我之前关于Inno-Tables的导入速度的问题有一个后续问题(惊奇!)。
方案
我尝试在合理的时间内在本地开发计算机上导入一些big *数据库转储。我们KEY
在表上附加了许多s,这些表原来是瓶颈,但对于我们的实时系统仍然很重要。
在问完上述问题后,我的方法是KEY ...
从转储,导入和重新添加键中删除语句。
但是,我经常发现自己正在编辑当前的转储以将其导入本地,并且偶然发现了这些有趣的“注释”(- disable/enable keys
行)
--
-- Dumping data for table `monster`
--
LOCK TABLES `monster` WRITE;
/*!40000 ALTER TABLE `monster` DISABLE KEYS */;
INSERT … INSERT … INSERT
/*!40000 ALTER TABLE `monster` ENABLE KEYS */;
UNLOCK TABLES;
这对我来说是个新闻,但好的,鉴于输出形式mysql --version
对我来说一切正常:
mysql Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (x86_64) using readline 6.3
我假设
表已锁定(很好,开发mashine上只有我一个人)。然后,禁用表模式中定义的键,导入数据,启用键。
因此,在“数据插入”阶段,不应浪费时间在键上,而应在插入所有数据之后进行检查。
我会以为这是相同的行为,就好像我KEY 'foo' (foo)'
从转储中删除所有-lines,导入转储并ADD KEY 'foo' ...
随后运行脚本一样。
我观察到的
是手动删除密钥,导入和重新添加密钥,然后依靠DISABLE KEYS
创建我的条件语句更快的方法mysqldump
手动编辑转储+ mysql导入+添加键= 15 + 8 + 8≈30min
普通mysql导入:放弃了,(我每天只得到8个小时的报酬> :))
我忍不住想,我在这里错过了一些非常基本的东西(或者数据库在拖我)。
mysqldump --innodb-optimize-keys
从Percona 使用percona.com/doc/percona-server/5.5/management/…长期:停止使用mysqldump并使用mydumper或xtrabackup。