Чи за замовчуванням індекси експорту mysqldump?


20

Я грав трохи з туздИшпр і мені було цікаво, якщо це робить показники експорту ( FULLTEXT, INDEX, ...) за замовчуванням. Я прочитав на ньому і знайшов такий варіант :

--disable-keys, -K

що говорить про те, що він фактично експортує індекси. Але я не хочу довіряти своїй інтерпретації, і хочу переконатися, що я правильно зрозумів (або неправильно ;-)). Хтось може це підтвердити?


Будь ласка, оновіть. Я оновив свою відповідь прикладом mysqldump уривків.
RolandoMySQLDBA

Будь ласка, оновіть. Я оновив свою відповідь додатковим застереженням щодо ОСНОВНИХ КЛЮЧІВ та РОЗКЛЮЧЕННЯХ
RolandoMySQLDBA

Будь ласка, оновіть. Я оновив свою відповідь додатковими застереженнями щодо обходу ОСНОВНИХ КЛЮЧІВ та скидання таблиць.
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.

Крім того, це вбудовується після того, як будуть зроблені всі ВСТАВКИ

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

КАВАТИ №1

DISABLE KEYS та ENABLE KEYS були реалізовані для відключення перезавантаження невідповідних індексів під час перезавантаження таблиці. Первинні та унікальні ключі не вимкнено. Вони завантажуються в ту ж мить, коли ВИСТАВКИ. Після того як ви ENABLE KEYS, індекси ненонічного відновлення відновлюються за допомогою сортування (або за допомогою кешу клавіш MyISAM не вистачає пам’яті)

На жаль, DISABLE KEYS та ENABLE KEYS працюють лише для таблиць MyISAM, а не InnoDB.

КАВАТИ №2

Вам не доведеться - відключати клавіші. Ви можете вимкнути DISABLE KEYS (каламбур не призначений) їх за допомогою --skip-disabled-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 містить індекси.
Еріка Кейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.