У меня есть куча файлов MyISAM (MYD, MYI, FRM) в каталоге mysql и их более новые версии в другом каталоге. Как я могу заменить «старые» на «новые», не останавливая сервер mysql?
В качестве ответа допустим
Вот подход наживки и подмены
Шаг 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.