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.