четверг, 20 декабря 2012 г.

бэкап mysql без простоев

Самый простой метод бэкапа - на рабочем сервере - часто вызывает простои, поскольку на время бэкапа БД вешает локи, и на больших таблицах это бывает очень заметно. Простой способ решить эту проблему - сделать на отдельном или даже том же сервере инстанс БД в режиме slave, только не забываем выставить уникальный server-id и прописать в конфиг слейву режим read-only. И теперь можно сделать очень интересную штуку: остановим слейв (достаточно только SQL thread) и можно дампить. Из плюсов - мы даже можем дампить разные базы и таблицы в разные файлы, сохранив при этом целостность репликации! То есть можно потом загрузить на новый сервер все эти файлы, и мы будем знать master_log_pos для этой схемы! Суть в том, что поскольку слейв остановлен, master_log_pos меняться не будет, поэтому достаточно сохранить пару log_pos и log_file и мы можем использовать этот комплект при разворачивании нового слейва или даже мастера. Главное, не забыть залить полную структуру :)

Есть вариант 2, поставив flush tables with read lock и сделав снапшот, но это хоть небольшой но простой и не очень хорошо автоматизируется: из самого mysql не сказать "сделать снапшот", и нельзя закрывать соединение с базой раньше времени, иначе лок снимется. Вдобавок, если была обработках больших объёмов, можно очень долго ждать пока лок встанет, что может сильно увеличить простой системы. И опять же для правильного бэкапа нужен отдельный инсанс базы, например innodb нельзя бэкапить просто запаковав его файлы.

Вариант 3 - используя mysqldumpslow, но ничего про него сказать не могу, у нас пока не применялось. И вопрос с сохранением master_log_pos, особенно применимо к записи по разным файлам.

Для MyISAM есть метод простого копирования файлов, сделать только сначала flush tables, и снова это не сохранит позицию.

Комментариев нет:

Отправить комментарий