¿MySqldump exporta índices, por defecto?


20

He jugado un poco un poco con mysqldump y me preguntaba, si lo hace índices de exportación ( FULLTEXT, INDEX, ...) de forma predeterminada. Lo leí y encontré esta opción :

--disable-keys, -K

lo que sugiere que en realidad exporta los índices. Pero no quiero confiar en mi interpretación y quiero asegurarme de que lo hice bien (o mal ;-)). ¿Alguien puede confirmar eso?


Porfavor refresca. Actualicé mi respuesta con ejemplos de extractos de mysqldump.
RolandoMySQLDBA

Porfavor refresca. Actualicé mi respuesta con una advertencia adicional sobre DESACTIVAR CLAVES y ACTIVAR CLAVES.
RolandoMySQLDBA

Porfavor refresca. Actualicé mi respuesta con advertencias adicionales sobre eludir DISABLE KEYS y volcar espacios de tabla.
RolandoMySQLDBA

Esta pregunta merece un +1 porque estoy casi seguro de que muchos han tenido esta misma pregunta en mente pero tenían miedo de hacerla. ¡Preguntaste, obtienes el +1!
RolandoMySQLDBA

@RolandoMySQLDBA: pones mucho esfuerzo en tu respuesta. ¡¡Muchas gracias!!
Aufwind

Respuestas:


16

No, no exporta índices. Los índices se reconstruyen al cargar mysqldump nuevamente en mysql. Las opciones que encontró "--disable-keys" hacen que mysqldump escriba algo así antes de la carga de la tabla a través de INSERTs:

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 línea después de LOCK TABLES es

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

Esto es lo que incorpora la opción --disable-keys en mysqldump.

Además, esto se incrusta después de que todos los INSERT están hechos

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

CAVEAT # 1

DISABLE KEYS y ENABLE KEYS se implementaron para deshabilitar la recarga de índices no únicos mientras se recarga una tabla. Las claves principales y las claves únicas no están deshabilitadas. Se cargan en el mismo momento en que se insertan los INSERT. Una vez que HABILITES LAS CLAVES, los índices no únicos se reconstruyen mediante la clasificación (o usando el caché de claves MyISAM si no hay suficiente memoria disponible)

Desafortunadamente, DISABLE KEYS y ENABLE KEYS solo funcionan para tablas MyISAM, no para InnoDB.

CUEVA # 2

No tiene que --disable-keys. Puede deshabilitar DISABLE KEYS (sin juego de palabras) 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.)

Esto podría resultar en una carga más lenta y una posible separación de las páginas de índice para índices no únicos.

CUEVA # 3

Puede volcar los espacios de tabla reales de InnoDB (MySQL 5.5.12)

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

1
Tenga en cuenta que esto está desactualizado, MySQL 5.7 incluye índices.
Erica Kane
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.