Mysqldump esporta indici, per impostazione predefinita?


20

Ho suonato in giro un po 'con mysqldump e mi chiedevo, se lo fa indici di esportazione ( FULLTEXT, INDEX, ...) per impostazione predefinita. L'ho letto e ho trovato questa opzione :

--disable-keys, -K

il che suggerisce che in realtà esporta gli indici. Ma non voglio fidarmi della mia interpretazione e voglio assicurarmi di averlo capito bene (o sbagliato ;-)). Qualcuno può confermarlo?


Per favore, aggiorna. Ho aggiornato la mia risposta con esempi di estratti mysqldump.
RolandoMySQLDBA

Per favore, aggiorna. Ho aggiornato la mia risposta con un avvertimento aggiuntivo su DISABLE KEYS e ENABLE KEYS.
RolandoMySQLDBA

Per favore, aggiorna. Ho aggiornato la mia risposta con ulteriori avvertenze sull'esclusione di DISABLE KEYS e sul dumping dei tablespace.
RolandoMySQLDBA

Questa domanda merita un +1 perché sono quasi certo che molti hanno avuto questa stessa domanda in mente ma avevo paura di porle. Hai chiesto, ottieni il +1 !!!
RolandoMySQLDBA

@RolandoMySQLDBA: hai dedicato molto impegno alla tua risposta. Grazie mille!!
Aufwind

Risposte:


16

No, non esporta gli indici. Gli indici vengono ricostruiti dopo il caricamento di mysqldump in mysql. Le opzioni che hai trovato "--disable-keys" fanno sì che mysqldump scriva qualcosa del genere prima del caricamento della tabella tramite 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 ...

La riga dopo LOCK TABLES è

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

Questo è ciò che l'opzione --disable-keys incorpora nel mysqldump.

Inoltre, questo viene incorporato dopo aver completato tutti gli INSERT

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

CAVEAT # 1

DISABLE KEYS e ENABLE KEYS sono stati implementati per disabilitare il ricaricamento di indici non univoci durante il ricaricamento di una tabella. Le chiavi primarie e le chiavi univoche non sono disabilitate. Vengono caricati nello stesso momento in cui si trovano gli INSERT. Dopo aver ABILITATO I TASTI, gli indici non unici vengono ricostruiti tramite l'ordinamento (o usando la cache della chiave MyISAM non c'è abbastanza memoria disponibile)

Sfortunatamente, DISABLE KEYS e ENABLE KEYS funzionano solo per le tabelle MyISAM, non InnoDB.

CAVEAT # 2

Non è necessario --disable-keys. È possibile disabilitare DISABLE KEYS (nessun gioco di parole previsto) con --skip-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.)

Ciò potrebbe comportare un carico più lento e un potenziale sbalzo delle pagine degli indici per gli indici non unici.

CAVEAT # 3

È possibile scaricare i tablespace InnoDB effettivi (MySQL 5.5.12)

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

1
Nota che questo non è aggiornato, MySQL 5.7 include indici.
Erica Kane,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.