MySQL обновляет всю базу данных без простоев - PullRequest
0 голосов
/ 28 апреля 2018

У меня большая база данных, которую нужно перестраивать каждые 24 часа. База данных создается с использованием специального сценария на сервере, который передает данные из разных файлов. Проблема в том, что весь процесс занимает 1 минуту, а это 1 минута простоя, потому что нам нужно удалить всю базу данных, чтобы восстановить ее (нет другого способа, кроме как удалить ее).

Сначала мы планировали создать временную базу данных, удалить исходную, а затем переименовать временную в исходное имя, но MySQL не поддерживает переименование базы данных.

Второй подход состоял в том, чтобы выгрузить файл .sql из временной базы данных и импортировать его в основную (исходную) базу данных, но это также приводит к простою.

Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 28 апреля 2018

Вот что я делаю. Это не приводит к нулевому простою, но может закончиться менее чем за секунду.

Создайте базу данных, которая имеет только элементы интерфейса с вашей реальной базой данных. В моем случае он содержит только определения представлений, и все пользовательские запросы проходят через эту базу данных.

Создайте новую базу данных каждую ночь. Когда это будет сделано, обновите определения представлений, чтобы они ссылались на новую базу данных. Я бы порекомендовал либо отключить доступ пользователей к базе данных, содержащей представления, во время их обновления, либо удалить все представления и воссоздать их - это предотвращает частичный доступ к старой базе данных. Поскольку создание представлений происходит быстро, это должна быть очень быстрая операция.

Мы делаем все это через работу. Фактически, прежде чем изменять производственные представления, мы проверяем создание представления в другой базе данных, чтобы убедиться, что все они работают.

Очевидно, что если вы используете alter view вместо того, чтобы требовать согласованности во всех представлениях, тогда не будет простоев, только краткий период несоответствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...