Назад | Перейти на главную страницу

Заменить файлы MyISAM без остановки Mysql

У меня есть куча файлов MyISAM (MYD, MYI, FRM) в каталоге mysql и их более новые версии в другом каталоге. Как я могу заменить «старые» на «новые», не останавливая сервер mysql?

В качестве ответа допустим

  • вы заменяете таблицу под названием proddata в базе данных proddb
  • у вас есть proddata.frm, proddata.MYD, proddata.MYI в / root

Вот подход наживки и подмены

Шаг 01) mysql> CREATE DATABASE baitandswitch;

Это должно создать папку /var/lib/mysql/baitandswitch

Шаг 02) Поместите новую версию таблицы proddata в baitandswitch база данных следующим образом:

$ cp /root/proddata.frm /var/lib/mysql/baitandswitch/.
$ cp /root/proddata.MYD /var/lib/mysql/baitandswitch/.
$ cp /root/proddata.MYI /var/lib/mysql/baitandswitch/.

CAVEAT: не беспокойтесь о mysql. Он обнаружит наличие новой таблицы в baitandswitch база данных и обновлять информацию в схеме на лету.

Шаг 03) Выполните обмен таблицы proddata между proddb база данных и baitandswitch база данных

mysql> ALTER TABLE proddb.proddata RENAME baitandswitch.proddata_old;
mysql> ALTER TABLE baitandswitch.proddata RENAME proddb.proddata;

Я рекомендую вам запускать эти две команды в одной строке:

mysql> ALTER TABLE proddb.proddata RENAME baitandswitch.proddata_old; ALTER TABLE baitandswitch.proddata RENAME proddb.proddata;

это оно

  • Без блокировки
  • Без промывки
  • Нет повреждения данных
  • Нет остановки сервера БД

Получайте удовольствие от этого.

Попробуйте !!!

ПРЕДОСТЕРЕЖЕНИЕ

Шаг 03 использует SQL для выполнения обмена, потому что он будет согласовывать, когда можно безопасно переместить стол. Следовательно, если к нему выполняются какие-либо запросы, выполнение SQL будет ждать завершения всех запросов, прежде чем выполнять перемещение таблицы.

Дополнительным преимуществом этого подхода является то, что старая таблица все еще доступна в baitandswitch база данных. Вы можете сделать копии таблиц в ОС, запустить SQL или просто отбросить baitandswitch база данных для удаления всех таблиц, которые необходимо переключить.

LOCK TABLES bla;
FLUSH TABLES bla;

Файлы подкачки на уровне операционной системы.

FLUSH TABLES bla;
UNLOCK TABLES bla;

(кредит Джеффу за таблицу блокировки)

Не надо. Вместо этого загрузите их в другую копию mysql и получите дамп с помощью mysqldump. Затем загрузите это в запущенный mysql.