it-swarm.com.de

Exportiert mysqldump standardmäßig Indizes?

Ich habe ein wenig mit mysqldump herumgespielt und mich gefragt, ob es standardmäßig Indizes (FULLTEXT, INDEX, ...) exportiert. Ich lies es nach und ich fand diese Option :

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

20
Aufwind

Nein, es werden keine Indizes exportiert. Indizes werden neu erstellt, wenn der mysqldump wieder in mysql geladen wird. Die Optionen, die Sie "--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 mysqldump einbettet.

Dies wird auch eingebettet, nachdem alle INSERTs abgeschlossen sind

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

CAVEAT # 1

DISABLE KEYS und ENABLE KEYS wurden implementiert, um das Neuladen nicht eindeutiger 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 sich die INSERTs befinden. Sobald Sie KEYS AKTIVIEREN, werden die nicht eindeutigen Indizes durch Sortieren neu erstellt (oder mithilfe des MyISAM-Schlüsselcaches ist nicht genügend Speicher verfügbar).

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 könnte zu einer langsameren Auslastung und einer möglichen Verschiebung der Indexseiten für nicht eindeutige Indizes führen.

CAVEAT # 3

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

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