mysqldumpはデフォルトでインデックスをエクスポートしますか?


20

私は、mysqldumpをして少しいじっし、それが輸出指数を(ない場合、私は、思っていたFULLTEXTINDEXデフォルトでは、...)。私はそれ読んでこのオプションを見つけました:

--disable-keys, -K

実際にインデックスをエクスポートすることを示唆しています。しかし、私は自分の解釈を信用したくありません。そして、私はそれが正しいことを確認したいです(または間違っています;-))。誰でもそれを確認できますか?


リフレッシュしてください。mysqldumpの抜粋の例を使用して回答を更新しました。
RolandoMySQLDBA

リフレッシュしてください。DISABLE KEYSおよびENABLE KEYSについての追加の警告で回答を更新しました。
RolandoMySQLDBA

リフレッシュしてください。DISABLE KEYSのバイパスとテーブルスペースのダンプに関する追加の注意事項で回答を更新しました。
RolandoMySQLDBA

多くの人がこれと同じ質問を念頭に置いているが、尋ねるのが怖かったので、この質問は+1に値する。あなたは尋ねた、あなたは+1を得る!!!
-RolandoMySQLDBA

@RolandoMySQLDBA:あなたは答えに多大な努力をしました。どうもありがとうございました!!
オーフウィンド

回答:


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はMyISAMテーブルでのみ機能し、InnoDBでは機能しません。

警告#2

--disable-keysを使用する必要はありません。--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
これは古くなっていることに注意してください。MySQL5.7にはインデックスが含まれています。
エリカケイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.