mysqldump는 기본적으로 인덱스를 익스포트합니까?


20

나는 mysqldump를 함께 조금 주위를 연주하고 수출 인덱스를 않는 경우 난 (궁금해서 FULLTEXT, INDEX기본적으로 ...). 나는 그것에 대해 읽고이 옵션을 발견 했다 .

--disable-keys, -K

이는 실제로 인덱스를 내보내는 것입니다. 그러나 나는 내 해석을 신뢰하고 싶지 않으며 내가 올바르게 해석했는지 확인하고 싶습니다 (또는 잘못된 ;-)). 누구든지 확인할 수 있습니까?


새로 고침하십시오. mysqldump 발췌 예제를 사용하여 답변을 업데이트했습니다.
RolandoMySQLDBA

새로 고침하십시오. DISABLE KEYS 및 ENABLE KEYS에 대한 추가 경고로 답변을 업데이트했습니다.
RolandoMySQLDBA

새로 고침하십시오. DISABLE KEYS를 우회하고 테이블 공간을 덤프하는 것에 대한 추가 경고로 답변을 업데이트했습니다.
RolandoMySQLDBA

이 질문은 +1이 필요합니다. 왜냐하면 많은 사람들이이 같은 질문을 염두에두고 있었지만 묻기를 두려워했기 때문입니다. 당신은 +1을 얻었습니다!
RolandoMySQLDBA

@RolandoMySQLDBA : 당신은 당신의 대답에 많은 노력을 기울였습니다. 대단히 감사합니다 !!
Aufwind

답변:


16

아니요, 인덱스를 내 보내지 않습니다. mysqldump를 다시 mysql로로드하면 인덱스가 다시 작성됩니다. "--disable-keys"옵션을 사용하면 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

DISABLE KEYS 및 ENABLE KEYS는 테이블을 다시로드하는 동안 고유하지 않은 인덱스를 다시로드하지 못하도록 구현되었습니다. 기본 키 및 고유 키는 비활성화되지 않습니다. INSERT가있는 순간에로드됩니다. 키를 활성화하면 고유하지 않은 인덱스가 정렬을 통해 다시 작성됩니다 (또는 MyISAM 키 캐시를 사용하여 사용 가능한 메모리가 충분하지 않음)

불행하게도 DISABLE KEYS 및 ENABLE KEYS는 InnoDB가 아닌 MyISAM 테이블에서만 작동합니다.

경고 # 2

키를 비활성화 할 필요는 없습니다. --skip-disable-keys를 사용하여 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.