Архивация баз данных неактивных клиентов в ISPmanager Business

AlexGur shared this problem 2 years ago
Known

Нужно сделать архивирование баз данных для отключенных пользователей.

На виртуальных хостингах довольно большое количество установленных, но нерабочих баз данных. То есть пользователь создаёт виртуальный хостинг, базу данных, устанавливает сайт и загружает данные в базу. А потом перестаёт платить за хостинг. Тогда аккаунт отключается, но в базе данных блокируется только пользователь. А таблицы то остаются!

Разве не логично при блокировке пользователя делать дамп базы данных пользователя и сохранять его на диск? А если пользователь продолжит платить за хостинг, то восстановить данные из дампа обратно в базу?

Ведь если так не сделать, то эти "мёртвые" данные будут занимать оперативную память сервера. Таблицы буду загружаться при старте сервера MySQL. И будут попадать в оперативную память. А ОЗУ стоит в ~20 (двадцать) раз дороже, чем дисковое пространство.

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

Пожалуйста, сделайте эту функцию как можно скорее. Не нужно хранить в оперативной памяти сервера мёртвый груз.

P.S.

А так как такой функции ещё нет, нужно сделать ещё и скрипт, который пройдётся по всем уже отключенным пользователям, сделает дампы их базы на диск и удалит базы из MySQL серверов.

Comments (4)

photo
1

Насколько вижу по своей статистике, на виртуальных хостингах большинство сайтов являются неактивными. Это значит, что функция архивации файлов и БД - это жизненно необходимая функция для ISPmanager Business. Поэтому предлагаю ещё три добавки к функции архивации неактивных виртуальных хостингов.

1. При отключении хостинга должны архивироваться не только данные из БД, которые загрузит пользователь, но и должны удаляться данные пользователя из доступов MySQL (таблица mysql.user). Эти же данные доступов есть в панели управления ISPmanager Business. В случае если пользователь оплатил отключенный виртуальный хостинг, то нужно заново создать базу и восстановить пользователя: в базу загрузить дамп, пользователю БД назначить его старый пароль. Но не продолжать хранить мёртвых пользователей в БД.

Конечно, за период простоя многое может измениться. К примеру, исчезнет версия БД, которая использовалась ранее. Если такое случится, то у пользователя должен быть беспрепятственный доступ к дампу базы. Чтобы он мог загрузить её в любую другую базу самостоятельно. Иначе принудительно пихать дамп в любую другую версию БД - это неправильно.

2. При отключении хостинга содержимое папки пользователя должно архивироваться и сжиматься, как и база данных. К примеру, делаем tar архив и сжимаем через gzip.

Дамп базы отлично сжимается через gzip. С файлами сайта дела обстоят чуть хуже, потому что там много картинок. Но в любом случае, сжатие БД и файлов сайта должно быть.

3. Дайте возможность хранить все "мёртвые души" (отключенные виртуальные хостинги) в одном месте. Нет большого смысла складировать архивы на той же ноде, на которой работал сайт (рабочая нода - это не свалка!). Поэтому предлагаю по прошествии определённого времени, к примеру трёх месяцев, переносить все архивы в отдельное хранилище. Для этого можно добавить роль для нод "Архив отключенных услуг". На ноду с такой ролью будет сыпаться весь этот мусор.

Либо можно сделать этот механизм без добавления роли для нод, а по аналогии с резервным копированием. То есть вообще отдельное хранилище, куда попадают архивы.

Если же пользователь через три месяца решит продолжить оплату и восстановит услугу, то копируем архив обратно на нужную ноду, загружаем данные в БД, распаковываем файлы сайта. Но стоит учитывать, что если пользователь забил на свой сайт на три месяца, то он явно ему не так уж и нужен. А следовательно, нет острой нужды восстанавливать его на той же самой ноде (ip адрес изменится - ну и фиг с ним).

photo
1

Всё вышесказанное необходимо применять и к доменам. При остановке услуги нужно удалять все данные домена с первичного и вторичных NS серверов кластера ISPmanager Business. Ведь используется PowerDNS, который хранит данные доменов в базе данных.

А то получается аналогичная ситуация: неиспользуемый хлам в базе данных. Причём домены не разделены по базам и пользователям, а сыпятся в одни и те же таблицы со всеми остальными доменами. В итоге, сейчас таблицы PowerDNS больше напоминают кладбище неиспользуемых доменов.

photo
1

Ну, серьёзно. Ни у кого не возникает вопросов, что полные архивные копии данных всех клиентов весят как бы в 4 (четыре) раза меньше, чем их сайты? Если на среднестатистическом хостинге больше половины услуг остановлено (как у меня), то это получается, что можно сэкономить почти 50% занимаемого пространства диска, если сжимать неактивных клиентов.


Или у вас у всех диски резиновые? 50% можно получить свободного места! Просто сжав в архивы файлы неактивных клиентов! Просто сожмите их и положите в корневую папку их хостингов (чтобы нельзя было скачать через обращение к сайту).


Думаю, я на следующей неделе покапаюсь в документации API и напишу подобный скрипт, который будет сжимать файлы (без баз) у клиентов, которые перестали платить больше 3-4 месяцев назад.

photo
1

Ещё один аргумент в пользу архивации баз данных неактивных клиентов виртуального хостинга - это неверные рекомендации mysqltuner. Проблема в том, что этот скрипт не понимает активна ли база или нет. И даёт свои рекомендации по размеру буферов, учитывая базы неактивных пользователей, которые вообще не получают никаких запросов и не попадают в ОЗУ (у них сайты отключены). Поэтому логично при отключении сайта делать zip дамп базы в папку пользователя на виртуальном хостинге и удалять её из mysql.

Тогда mysqltuner не будет предлагать делать буферы размером в сотни гигабайт. Просто из-за того что половина баз на сервере неактивна.