Mysqldump varsayılan olarak dizinleri dışa aktarıyor mu?


20

Ben mysqldump biraz etrafında oynadı ve ihracat endeksleri yaparsa ben (merak ediyorum FULLTEXT, INDEXvarsayılan olarak, ...). Ben bunun üzerinde okumak ve buldum bu seçeneği :

--disable-keys, -K

bu da aslında endeksleri ihraç ettiğini göstermektedir. Ama benim yorumuma güvenmek istemiyorum ve doğru (ya da yanlış ;-)) doğru yaptığımdan emin olmak istiyorum. Bunu onaylayan var mı?


Lütfen yenileyin. Cevabımı örnek mysqldump alıntılarıyla güncelledim.
RolandoMySQLDBA

Lütfen yenileyin. Cevabımı DISABLE KEYS ve ENABLE KEYS hakkında ek bir uyarı ile güncelledim.
RolandoMySQLDBA

Lütfen yenileyin. Cevabımı DISABLE KEYS'i atlatma ve tablo alanlarını boşaltma hakkında ek uyarılarla güncelledim.
RolandoMySQLDBA

Bu soru + 1'i hak ediyor çünkü birçok kişinin aynı soruyu aklında bulunduğundan neredeyse eminim ama sormaktan korkuyordum. Siz sordunuz, +1 alın !!!
RolandoMySQLDBA

@RolandoMySQLDBA: Cevabınıza çok çaba sarfettiniz. Çok teşekkür ederim!!
Aufwind

Yanıtlar:


16

Hayır, dizinleri dışa aktarmaz. Mysqldump tekrar mysql'e yüklendiğinde indeksler yeniden oluşturulur. "--Disable-keys" anahtarını bulduğunuz seçenekler, mysqldump'ın tablonun INSERT'ler aracılığıyla yüklenmesinden önce böyle bir şey yazmasına neden olur:

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

LOCK TABLES sonrası satır

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

--Disable-keys seçeneğinin mysqldump içine kattığı şey budur.

Ayrıca, tüm INSERT'ler yapıldıktan sonra bu katıştırılır

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

Mağara # 1

Tablo yeniden yüklenirken benzersiz olmayan dizinlerin yeniden yüklenmesini devre dışı bırakmak için DEVRE DIŞI TUŞLAR ve ETKİNLEŞTİRME TUŞLARI uygulandı. Birincil Anahtarlar ve Benzersiz Anahtarlar devre dışı bırakılmaz. INSERT'lerin bulunduğu anda yüklenirler. ANAHTARLARI ETKİNLEŞTİRDİĞİNİZDE, benzersiz olmayan dizinler sıralama yoluyla yeniden oluşturulur (veya MyISAM anahtar önbelleğini kullanarak yeterli bellek yok demektir)

Ne yazık ki, DISABLE KEYS ve ENABLE KEYS, InnoDB için değil, yalnızca MyISAM tabloları için çalışır.

Mağara # 2

--Disable-keys gerekmez. --Skip-devre dışı bırakma tuşları ile DISABLE KEYS'i (punto amaçlanmamış) devre dışı bırakabilirsiniz:

  -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.)

Bu, daha yavaş bir yüke ve benzersiz olmayan dizinler için dizin sayfalarının potansiyel olarak kaymasına neden olabilir.

Mağara # 3

Gerçek InnoDB tablo alanlarını dökebilirsiniz (MySQL 5.5.12)

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

1
Bunun güncel olmadığını, MySQL 5.7'de dizinler bulunduğunu lütfen unutmayın.
Erica Kane
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.