Подвисание сервера на время выполнения бекапа

Что-то не работает? Пишите здесь.

Подвисание сервера на время выполнения бекапа

UNREAD_POST test7 » 17.04.2015 14:21:15

Приветствую! Может кто-то подскажет решение.

Использую Sypex Dumper Pro 2.0.11
Сайт на мощном VDS с большой MySQL базой.
Одна из таблиц (с сообщениями на форуме) содержит 3 000 000 записей и весит 1,3Гб.
Все таблицы в сумме 2,3Гб, на выходе архив 750Мб.

При выполнении бекапа через крон сайт начинает некоторое время сильно тупить, в итоге пару минут не открывается вообще или потом новые сообщения на форуме дублируются по 2-3 раза...

Возможно во время бекапа блокируется таблица с сообщениями на форуме или нагрузка на сервер слишком большая?
Есть ли выход, чтобы бекап делался без нарушения работы сайта.
test7
 
Сообщения: 5
Зарегистрирован: 17.04.2015 14:09:02

Re: Подвисание сервера на время выполнения бекапа

UNREAD_POST zapimir » 17.04.2015 16:07:30

Какая параметры VDS сколько ядер/памяти? Посмотрите с помощью top или htop нагрузку на сервере во время бэкапа, что больше нагружает процессор apache/php или mysql.
Какое сжатие используете, и используете ли режим OUTFILE? В какое время делаете бэкап?
Естественно, чтобы достать и сжать 2,3 ГБ данных из MySQL это весьма существенная нагрузка на сервер.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Подвисание сервера на время выполнения бекапа

UNREAD_POST test7 » 17.04.2015 21:53:37

Сервер на Debian
Процессор: CPU8 x 2,7 ГГц
Оперативная: 4 Гб
100Gb SSD
Процессор нагружен обычно не более чем на 20%, в том числе в процессе создания бекапа.

Бекап создается по ночам в 5:00 примерно за 7-8 минут.
Сервер в это время не нагружен.
Хотел бы конечно и днем запускать без последствий.

Настройки Dumper:
Сжатие - GZip 7 (пробовал и меньше)
OUTFILE - не включен.
Время выполнения - 600 сек
Размер буффера OUTFILE (МБ) - 64

p.s. т.к. в скрипте и на сайте нет подсказок никаких и справки честно говоря невозможно понять что такое OUTFILE и что допустим произойдет по истечению 600 секунд - программа прервется и файл будет не полный или что-то еще :(



Сейчас экспериментировал с бекапами через WEB.

Во время выполнения бекапа изменения нагрузки на процессор практически нет. С виду не виснет ничего при просмотре, но экспериментировал только на части таблиц и не через Cron.

Явная проблема, которая четко отслеживается - допустим если бекапить таблицу с сообщениями на форуме (3 минуты), то в процессе ее бекапа новое сообщение добавить туда невозможно. Даже если время выполнения поставить 10 секунд.
Вложения
Без-имени-1.gif
htop во время выполнения бекапа через WEB
Без-имени-1.gif (53.67 Кб) Просмотров: 9552
test7
 
Сообщения: 5
Зарегистрирован: 17.04.2015 14:09:02

Re: Подвисание сервера на время выполнения бекапа

UNREAD_POST test7 » 17.04.2015 21:56:38

При включении OUTFILE возникает ошибка:
MySQL Error: Access denied for user \'****\'@\'localhost\' (using password: YES)

Победить ее пока не получилось. У пользователя вроде бы все права есть.
test7
 
Сообщения: 5
Зарегистрирован: 17.04.2015 14:09:02

Re: Подвисание сервера на время выполнения бекапа

UNREAD_POST zapimir » 21.04.2015 21:47:20

Извиняюсь за задержку с ответом.

Время выполнения предназначено для обхода ограничений на сервере, если дампер приближается к этому времени, он останавливает процесс - после чего продолжает в новом процессе.

Вообще во время бэкапа и нельзя ничего добавлять в базу, так как может получиться не консистентный бэкап. Т.е. к примеру часть таблиц уже забэкапилась, а в это время другие зависимые таблицы были изменены из-за этого при восстановлении может возникнуть ошибка.

OUTFILE режим это режим в котором используется более быстрая выгрузка из базы с помощью команды MySQL SELECT ... INTO OUTFILE. В общем это намного быстрее, чем обычными средствами делать.

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

Насколько вижу у вашего пользователя таких прав нет. Зайдите под root пользователем и выполните запросы
Код: Выделить всё
GRANT FILE  ON *.* TO 'USER_NAME'@'localhost';
FLUSH PRIVILEGES;

где вместо USER_NAME указать имя MySQL-пользователя.

Если вам нужно делать бэкап в любое время и без остановки добавления информации в БД, то в таком случае нужно делать репликацию (т.е. сервер копию MySQL) и с этой MySQL-копии уже делать бэкап.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Подвисание сервера на время выполнения бекапа

UNREAD_POST test7 » 22.04.2015 19:16:33

Спасибо за подробный ответ.

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

-------------------

И еще один момент, уже не относящийся к старттопику обнаружил - неправильная кодировка при восстановлении.

Ситуация:
Есть таблица для которой зада кодировка "cp1251_general_ci".
Внутри таблицы поля в разных кодировках - одни в "utf8_general_ci", другие в "cp1251_general_ci".

При восстановлении такой таблицы текст получается нечитабельный, в неправильной кодировке.
Конкретно поля, которые были в "utf8_general_ci" попортились.
Галочка при импорте "Коррекция кодировки" - ничего не меняет.

Помогла только смена кодировки таблицы на "utf8_general_ci", тогда Экспорт - Импорт проходит корректно.
test7
 
Сообщения: 5
Зарегистрирован: 17.04.2015 14:09:02

Re: Подвисание сервера на время выполнения бекапа

UNREAD_POST test7 » 22.04.2015 23:19:32

zapimir писал(а):Вообще во время бэкапа и нельзя ничего добавлять в базу, так как может получиться не консистентный бэкап. Т.е. к примеру часть таблиц уже забэкапилась, а в это время другие зависимые таблицы были изменены из-за этого при восстановлении может возникнуть ошибка.

А если допустим мне это не принципиально в случае "горячего" бекапа. Резервная копия может понадобиться только в экстренном случает и тогда отсутствие пары записей будет не так принципиально. А вот блокировать запись на крупном проекте на 5-10 минут посреди дня очень критично.

Может было бы возможным добавить в скрипт какую-то галочку для этого, типа "не блокировать таблицы на время выполнения экспорта"? Или через каждый сколько-то секунд давать выполниться insert-ам (время выполнения скрипта это не решает). Тогда бы днем делал "некачественные" бекапы, а ночью "качественные" :)

Было бы очень удобно. Не хочется уходить на другие программы из-за этого т.к. в остальном sypex dumper pro очень удобен и использую его на всех сайтах.
test7
 
Сообщения: 5
Зарегистрирован: 17.04.2015 14:09:02


Вернуться в Проблемы и баги

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], SemrushBot и гости: 7

Яндекс.Метрика