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

Auf*_*ind 22 mysql myisam mysqldump index export

我在 mysqldump 上玩了一会儿,我想知道它是否默认导出索引 ( FULLTEXT, INDEX,...)。我阅读了它,我找到了这个选项

--disable-keys, -K
Run Code Online (Sandbox Code Playgroud)

这表明,它实际上确实导出了索引。但我不想相信我的解释,我想确保我做对了(或错了;-))。任何人都可以确认吗?

Rol*_*DBA 17

不,它不导出索引。在将 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 ...
Run Code Online (Sandbox Code Playgroud)

LOCK TABLES 之后的行是

/*!40000 ALTER TABLE `tblAccountLinks` DISABLE KEYS */;
Run Code Online (Sandbox Code Playgroud)

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

此外,这是在所有 INSERT 完成后嵌入的

/*!40000 ALTER TABLE `tblAccountLinks` ENABLE KEYS */;
UNLOCK TABLES;
Run Code Online (Sandbox Code Playgroud)

警告 #1

已实施 DISABLE KEYS 和 ENABLE KEYS 以在重新加载表时禁用非唯一索引的重新加载。未禁用主键和唯一键。它们在插入的同时加载。一旦启用密钥,非唯一索引将通过排序重建(或使用 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.)
Run Code Online (Sandbox Code Playgroud)

这可能会导致加载速度变慢,并可能导致非唯一索引的索引页不平衡。

警告 #3

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

  -Y, --all-tablespaces 
                      Dump all the tablespaces.
  -y, --no-tablespaces 
                      Do not dump any tablespace information.
Run Code Online (Sandbox Code Playgroud)

  • 请注意这是过时的,MySQL 5.7 确实包含索引。 (2认同)