Невозможно восстановить из базы данных mysql - PullRequest
2 голосов
/ 05 марта 2010

Я сделал дамп своей базы данных, в которой одна таблица довольно большая (около 4 миллионов записей) и имеет большое количество индексов (один полнотекстовый индекс вместе с первичным ключом и 3 уникальных индекса). Когда я пытаюсь восстановить этот дамп, восстановление зависает (оно работает уже пять дней), когда оно пытается выполнить инструкцию, которая включает ключи (таблица ALTER x ENABLE keys).

Любые предложения о том, как восстановить этот дамп, приветствуются. Стол в Вопрос в таблице myisam.

Вот вывод showprocesslist

mysql> show processlist;
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
| Id   | User     | Host                                            | db            | Command | Time | State                | Info                                           |
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
| 2350 | rdsadmin | localhost:52508                                 | NULL          | Sleep   | 3701 |                      | NULL                                           |
| 3331 | root     | <remote_ip>                            | <db> | Query   | 7971 | Repair with keycache | /*!40000 ALTER TABLE `entities` ENABLE KEYS */ |
| 3810 | root     | <remote_ip> | NULL          | Query   |    0 | NULL                 | show processlist                               |
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
3 rows in set (0.00 sec)

Спасибо

Ответы [ 2 ]

1 голос
/ 06 марта 2010

Причина, по которой это происходит так медленно, заключается в том, что таблица изменения использует «Восстановление с помощью кеша ключей» для построения индекса. Это строит индекс, добавляя одну запись за раз в индекс.

Гораздо более быстрый способ - использовать «Ремонт с сортировкой». Тем не менее, MySQL должен иметь много памяти и временного дискового пространства для этой работы, и что обычно происходит, так это то, что MySQL запускается с использованием метода «sort», заканчивается пространство и возвращается к методу «keycache» .

Обходной путь - позволить вашему серверу MySQL использовать больше места для сортировки. Это контролируется некоторыми переменными сервера:

  • myisam_max_sort_file_size - установите для этого значения настолько большое, насколько вы можете себе позволить - например. 150G
  • myisam_sort_buffer_size - опять же, большой лучше - например. 1G

Это обе динамические переменные, но я сомневаюсь, что изменение их после запуска таблицы alter принесет большую пользу. Если вы не хотите изменять конфигурацию вашей системы, то альтернативный подход заключается в построении индексов с использованием myisamchk в режиме восстановления с выделением больших буферов сортировки.

0 голосов
/ 05 марта 2010

PostgreSQL не поддерживает оператор «alter table x enable keys»:

alter table a enable keys;
ERROR:  syntax error at or near "keys"
LINE 1: alter table a enable keys;
                             ^

Попробуйте сбросить базу данных MySQL с помощью mysqldump --compatible=postgresql - может быть, тогда она загрузится нормально.

Вы также можете сначала попытаться создать и импортировать только схему с помощью mysqldump --compatible=postresql --no-data. Было бы легче исправить любые несовместимости в файле дампа вручную. При успешном импорте выгрузите и импортируйте данные только с mysqldump --compatible=postresql --no-create-info.

...