mysqldump ดัชนีการส่งออกเป็นค่าเริ่มต้นหรือไม่


20

ผมเล่นไปรอบ ๆ เล็ก ๆ น้อย ๆ ที่มี mysqldump และผมสงสัยว่าถ้ามันไม่ดัชนีการส่งออก ( FULLTEXT, INDEX, ... ) โดยค่าเริ่มต้น ฉันอ่านมันและฉันพบตัวเลือกนี้ :

--disable-keys, -K

ซึ่งแสดงว่ามันส่งออกดัชนีจริง ๆ หรือไม่ แต่ฉันไม่ต้องการที่จะเชื่อใจการตีความของฉันและฉันต้องการให้แน่ใจว่าฉันเข้าใจถูก (หรือผิด ;-)) มีใครยืนยันได้บ้าง


กรุณารีเฟรช ฉันอัปเดตคำตอบของฉันด้วยตัวอย่างที่คัดลอกมา mysqldump
RolandoMySQLDBA

กรุณารีเฟรช ฉันอัปเดตคำตอบของฉันด้วยคำเตือนเพิ่มเติมเกี่ยวกับคีย์ปิดใช้งานและคีย์เปิดใช้งาน
RolandoMySQLDBA

กรุณารีเฟรช ฉันอัปเดตคำตอบของฉันด้วยคำเตือนเพิ่มเติมเกี่ยวกับการข้ามคีย์ DISABLE และดัมพ์พื้นที่ตาราง
RolandoMySQLDBA

คำถามนี้ควรได้รับ +1 เพราะฉันมั่นใจว่าหลายคนมีคำถามเดียวกันนี้ในใจ แต่ไม่กล้าถาม คุณถามคุณจะได้รับ +1 !!!
RolandoMySQLDBA

@RolandoMySQLDBA: คุณใช้ความพยายามอย่างมากในคำตอบของคุณ ขอบคุณมาก!!
Aufwind

คำตอบ:


16

ไม่มันไม่ส่งออกดัชนี ดัชนีถูกสร้างใหม่เมื่อโหลด mysqldump กลับไปที่ mysql ตัวเลือกที่คุณพบ "- ปิดการใช้งานคีย์" ทำให้ mysqldump เขียนบางอย่างเช่นนี้ก่อนโหลดตารางผ่าน 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 ...

เส้นหลัง LOCK TABLES คือ

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

นี่คือสิ่งที่ตัวเลือก --disable-keys ฝังอยู่ใน mysqldump

นอกจากนี้จะถูกฝังหลังจาก INSERT ทั้งหมดเสร็จสิ้น

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

ถ้ำ # 1

ปิดใช้งานคีย์และคีย์เปิดใช้งานเพื่อปิดใช้งานการโหลดดัชนีที่ไม่ซ้ำกันในขณะที่ตารางกำลังโหลดซ้ำ คีย์หลักและคีย์เฉพาะจะไม่ถูกปิดใช้งาน จะถูกโหลดในเวลาเดียวกันกับที่ INSERT เมื่อคุณเปิดใช้งานคีย์ดัชนีที่ไม่ซ้ำกันจะถูกสร้างขึ้นใหม่ผ่านการจัดเรียง (หรือใช้แคชคีย์ MyISAM คือมีหน่วยความจำไม่เพียงพอ)

น่าเสียดายที่ DISABLE KEYS และ ENABLE KEYS ใช้งานได้กับตาราง MyISAM เท่านั้นไม่ใช่ InnoDB

ถ้ำ # 2

คุณไม่จำเป็นต้อง - ปิดใช้งานคีย์ คุณสามารถปิดการใช้งานปุ่มปิดการใช้งาน (ไม่ได้ตั้งใจเล่นสำนวน) ด้วย --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.)

สิ่งนี้อาจส่งผลให้โหลดช้าลงและอาจเกิดการวนรอบของหน้าดัชนีสำหรับดัชนีที่ไม่ซ้ำกัน

ถ้ำ # 3

คุณสามารถดั๊บตาราง InnoDB จริง (MySQL 5.5.12)

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

1
โปรดทราบว่านี่ล้าสมัยแล้ว MySQL 5.7 จะรวมดัชนีไว้ด้วย
Erica Kane
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.