26.07.2013

Массовая миграция пользователей между серверами ISPmanager

Прижала меня жизнь, как видно из названия. И прижала сильно. Перенос 2300 пользователей - это чистейшей воды ад. Я дам только основные этапы. 99% работы придется допиливать по месту.

Первый этап:

Если оставить дефолтные настройки MySQL на принимающем сервере, более половины баз не вгрузятся - и вот тогда на помощь придет веревка и мыло. Дабы избежать главной и самой досадной ошибки, увеличим размер единовременно вгружаемого пакета команд в MySQL:
set global max_allowed_packet = 104857600;
Да, пусть это будет на лету, а не с конфига. Мы все равно перезагружать MySQL не будем. А после того, как все импортируется, нас больше не будет интересовать эта настройка.

Второй этап:

Если Вы переносите пользователей с нескольких разных серверов, то у Вас будет затык с одинаковыми названиями баз и/или имен пользователей MySQL. Не бывает серверов, на котором какой-нибудь умник не заведет базу под названием joomla, wp или admin.

Очень важно понимать, что эту проблему лучше решить на исходных серверах, так как после переноса придется заново бэкапировать. заново монтировать удаленные сервера по SSHFS, заново перегонять архивы и заново их распаковывать.

Как решать: берете список на каждом из серверов, чистите его от мусора, сортируете, diif.
Списки тут:
select db from mysql.db;select user from mysql.user;
В случае обнаружения одинаковых пользователей нужно создать пользователю базу с более уникальным именем или более уникального пользователя. Затем вписать это в конфиг сайта.

Третий этап:

Дисковое пространство. Места, куда мы бэкапимся, должно хватить на сумму файлов /var/www и /var/lib/mysql. Например мы нашли место на /var/backups/

Четвертый этап:

Возможно когда-то пользователи перемещались между серверами. При этом на исходном он не был удален, а был просто выключен. Но! Мы не можем просто взять и сдампить только включенных - ведь есть те, кого выключили за неуплату. Быть может завтра он оплатит - а ему нечего включать - его данные остались на исходном сервере.