Exportiert mysqldump standardmäßig Indizes?

20

Ich spielte ein wenig mit mysqldump um , und ich habe mich gefragt, ob es Export Indizes bedeutet ( FULLTEXT, INDEX, ...) standardmäßig aktiviert . Ich habe es nachgelesen und diese Option gefunden :

--disable-keys, -K

was darauf hindeutet, dass es tatsächlich die Indizes exportiert. Aber ich möchte meiner Interpretation nicht vertrauen und ich möchte sicherstellen, dass ich sie richtig (oder falsch) verstanden habe. Kann das jemand bestätigen?

Aufwind
quelle
Bitte aktualisieren. Ich habe meine Antwort mit Beispiel-mysqldump-Ausschnitten aktualisiert.
RolandoMySQLDBA
Bitte aktualisieren. Ich habe meine Antwort mit einer zusätzlichen Einschränkung bezüglich DISABLE KEYS und ENABLE KEYS aktualisiert.
RolandoMySQLDBA
Bitte aktualisieren. Ich habe meine Antwort mit einer zusätzlichen Einschränkung über das Umgehen von DISABLE KEYS und das Ausgeben von Tablespaces aktualisiert.
RolandoMySQLDBA
Diese Frage verdient eine +1, da ich fast sicher bin, dass viele die gleiche Frage im Sinn hatten, aber Angst hatten, sie zu stellen. Du hast gefragt, du bekommst die +1 !!!
RolandoMySQLDBA
@RolandoMySQLDBA: Sie geben sich viel Mühe mit Ihrer Antwort. Vielen Dank!!
Aufwind

Antworten:

16

Nein, es werden keine Indizes exportiert. Indizes werden neu erstellt, wenn der mysqldump wieder in mysql geladen wird. Die Optionen, die Sie mit "--disable-keys" gefunden haben, bewirken, dass der mysqldump vor dem Laden der Tabelle über INSERTs so etwas schreibt:

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 ...

Die Zeile nach LOCK TABLES ist

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

Dies ist, was die Option --disable-keys in den mysqldump einbettet.

Dies wird auch eingebettet, nachdem alle INSERTs durchgeführt wurden

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

CAVEAT # 1

DISABLE KEYS und ENABLE KEYS wurden implementiert, um das Neuladen von nicht eindeutigen Indizes zu deaktivieren, während eine Tabelle neu geladen wird. Primärschlüssel und eindeutige Schlüssel sind nicht deaktiviert. Sie werden im selben Moment geladen, in dem die INSERTs geladen werden. Sobald Sie KEYS AKTIVIEREN, werden die nicht eindeutigen Indizes durch Sortieren neu erstellt (oder wenn im MyISAM-Schlüsselcache nicht genügend Speicher verfügbar ist).

Leider funktionieren DISABLE KEYS und ENABLE KEYS nur für MyISAM-Tabellen, nicht für InnoDB.

CAVEAT # 2

Sie müssen nicht --disable-keys. Sie können DISABLE KEYS (kein Wortspiel beabsichtigt) mit --skip-disable-keys deaktivieren:

  -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.)

Dies kann zu einer langsameren Auslastung und einem möglichen Ausbleiben der Indexseiten für nicht eindeutige Indizes führen.

CAVEAT # 3

Sie können die tatsächlichen InnoDB-Tablespaces sichern (MySQL 5.5.12)

  -Y, --all-tablespaces 
                      Dump all the tablespaces.
  -y, --no-tablespaces 
                      Do not dump any tablespace information.
RolandoMySQLDBA
quelle
1
Bitte beachten Sie, dass dies veraltet ist. MySQL 5.7 enthält Indizes.
Erica Kane