默认情况下,mysqldump是否导出索引?


20

我打得四处少许使用mysqldump,我想知道,如果它的出口指数(FULLTEXTINDEX,...),默认情况下。我仔细阅读,发现了这个选项

--disable-keys, -K

这表明它确实确实导出了索引。但是我不想相信自己的解释,而是想确保自己理解正确(或错误;-)。谁能确认?


请刷新。我用示例mysqldump摘录更新了答案。
RolandoMySQLDBA 2011年

请刷新。我用有关DISABLE KEYS和ENABLE KEYS的附加警告来更新我的答案。
RolandoMySQLDBA 2011年

请刷新。我用绕过DISABLE KEYS和转储表空间的其他警告来补充我的答案。
RolandoMySQLDBA 2011年

这个问题值得+1,因为我几乎可以肯定很多人都想到了这个相同的问题,但是却不敢问。你问,你得到+1!
RolandoMySQLDBA 2011年

@RolandoMySQLDBA:您在回答中付出了很多努力。非常感谢你!!
2011年

Answers:


16

不,它不导出索引。在将mysqldump加载回mysql时将重建索引。您发现的选项“ --disable-keys”导致mysqldump在通过INSERT加载表之前写入如下内容:

DROP TABLE IF EXISTS `tblAccountLinks`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `tblAccountLinks` (
  `ID` int(11) NOT NULL auto_increment,
  `FirmNo` varchar(10) NOT NULL,
  `CustomerNo` varchar(20) NOT NULL,
  `AccountNo` varchar(20) NOT NULL,
  `LinkType` smallint(6) NOT NULL,
  `AccessLevel` smallint(6) NOT NULL,
  `Status` smallint(6) NOT NULL,
  `CreatedOn` datetime NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=27023 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;

--
-- Dumping data for table `tblAccountLinks`
--

LOCK TABLES `tblAccountLinks` WRITE;
/*!40000 ALTER TABLE `tblAccountLinks` DISABLE KEYS */;
INSERT INTO `tblAccountLinks` VALUES (1,'F0001','C001','T00000001',1,2,1,'2008-06-30 07:55:43'),(2,'
F0001','C001','T00000002',2,2,1,'2008-06-30 07:55:43'),(3,'F0001','C002','27601012',1,2,1,'2008-06-3 ...

LOCK TABLES之后的行是

/*!40000 ALTER TABLE `tblAccountLinks` DISABLE KEYS */;

这就是--disable-keys选项嵌入在mysqldump中的内容。

同样,在所有插入完成之后将其嵌入

/*!40000 ALTER TABLE `tblAccountLinks` ENABLE KEYS */;
UNLOCK TABLES;

小穴#1

实现DISABLE KEYS和ENABLE KEYS是为了在重新加载表时禁止重新加载非唯一索引。不禁用主键和唯一键。它们在插入INSERT的同时加载。启用密钥后,将通过排序(或使用MyISAM密钥高速缓存来确定可用内存不足)来重建非唯一索引

不幸的是,DISABLE KEYS和ENABLE KEYS仅适用于MyISAM表,不适用于InnoDB。

小穴#2

您不必--disable-keys。您可以使用--skip-disable-keys禁用DISABLE KEYS(无双关):

  -K, --disable-keys  '/*!40000 ALTER TABLE tb_name DISABLE KEYS */; and
                      '/*!40000 ALTER TABLE tb_name ENABLE KEYS */; will be put
                      in the output.
                      (Defaults to on; use --skip-disable-keys to disable.)

对于非唯一索引,这可能会导致加载速度变慢,并可能导致索引页错位。

CAVEAT#3

您可以转储实际的InnoDB表空间(MySQL 5.5.12)

  -Y, --all-tablespaces 
                      Dump all the tablespaces.
  -y, --no-tablespaces 
                      Do not dump any tablespace information.

1
请注意,这已经过时了,MySQL 5.7确实包含了索引。
艾丽卡·凯恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.