Apakah indeks ekspor mysqldump, secara default?

20

Aku bermain-main sedikit dengan mysqldump dan aku bertanya-tanya, jika tidak indeks ekspor ( FULLTEXT, INDEX, ...) secara default. Saya membacanya dan menemukan opsi ini :

--disable-keys, -K

yang menunjukkan, bahwa itu sebenarnya mengekspor indeks. Tapi saya tidak ingin mempercayai interpretasi saya dan saya ingin memastikan saya sudah benar (atau salah ;-)). Adakah yang bisa mengkonfirmasi itu?

Aufwind
sumber
Mohon segarkan. Saya memperbarui jawaban saya dengan contoh kutipan mysqldump.
RolandoMySQLDBA
Mohon segarkan. Saya memperbarui jawaban saya dengan peringatan tambahan tentang DISABLE KEYS dan ENABLE KEYS.
RolandoMySQLDBA
Mohon segarkan. Saya memperbarui jawaban saya dengan peringatan tambahan tentang melewati tombol DISABLE dan membuang tablespace.
RolandoMySQLDBA
Pertanyaan ini layak diberi +1 karena saya hampir yakin banyak di antara mereka yang memiliki pertanyaan yang sama tetapi takut untuk bertanya. Anda bertanya, Anda mendapatkan +1 !!!
RolandoMySQLDBA
@RolandoMySQLDBA: Anda berusaha keras dalam jawaban Anda. Terima kasih banyak!!
Aufwind

Jawaban:

16

Tidak, itu tidak mengekspor indeks. Indeks dibangun kembali setelah memuat mysqldump kembali ke mysql. Opsi yang Anda temukan "--disable-keys" menyebabkan mysqldump untuk menulis sesuatu seperti ini sebelum memuat tabel melalui 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 ...

Baris setelah LOCK TABLES adalah

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

Inilah yang opsi embed --disable-keys di mysqldump.

Juga, ini tertanam setelah semua INSERT selesai

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

CAVEAT # 1

DISABLE KEYS dan ENABLE KEYS diimplementasikan untuk menonaktifkan reload indeks nonunique saat tabel sedang dimuat ulang. Kunci Utama dan Kunci Unik tidak dinonaktifkan. Mereka dimuat pada saat yang sama INSERT sedang. Setelah Anda MENGAKTIFKAN KUNCI, indeks nonunique dibangun kembali melalui pengurutan (atau menggunakan cache kunci MyISAM adalah tidak ada cukup memori yang tersedia)

Sayangnya, DISABLE KEYS dan ENABLE KEYS hanya berfungsi untuk tabel MyISAM, bukan InnoDB.

CAVEAT # 2

Anda tidak perlu --disable-keys. Anda dapat menonaktifkan DISABLE KEYS (tanpa maksud kata) mereka dengan --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.)

Ini dapat menghasilkan beban yang lebih lambat dan potensi lopsiding dari halaman indeks untuk indeks nonunique.

CAVEAT # 3

Anda dapat membuang tablespace InnoDB aktual (MySQL 5.5.12)

  -Y, --all-tablespaces 
                      Dump all the tablespaces.
  -y, --no-tablespaces 
                      Do not dump any tablespace information.
RolandoMySQLDBA
sumber
1
Harap dicatat ini sudah ketinggalan zaman, MySQL 5.7 tidak termasuk indeks.
Erica Kane