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

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

Итак, исходные данные: база MySQL весит 50Гб, на старом сервере свободно на диске 5Гб. Дамп сделать не возможно, так как не помещается, даже, если использовать сжатие gzip.

На новом сервере свободно 55ГБ, но если залить на него дамп, то опять же, останется всего 5ГБ, и здесь уже обратная проблема — не получится этот дамп восстановить, снова не хватит места.

Идея родилась быстро. А что, если задействовать для переноса третий сервер, где свободного места предостаточно?

Реализовать решил так: на новом сервере смонтировать как папку удалённое ftp место с третьего сервера, и прямо туда сделать дамп, а потом оттуда же восстановить. При этом свободное место ни на одном из серверов вообще не задействуется. Кстати эту ftp папку можно было смонтировать и на старом сервере, там сделать в неё дамп, а потом из неё восстановить на новом. Но я решил сделать быстрее, управлять переносом только с нового сервера.

Приступаем к реализации задуманного.

Всё выполняем только на новом сервере. Кстати, на обоих установлена Centos 7.

Для начала устанавливаем curlftpfs:

yum install curlftpfs

Дальше в файл /etc/fstab добавляем:

curlftpfs#ftp://USER:PASSWORD@SERVER/ /remote fuse rw,uid=1000,allow_other,user 0 1

Где:

  • USER:PASSWORD@SERVER — данные от нашего ftp аккаунта на удалённом, третьем сервере.
  • /remote — локальная папка, в которую мы хотим примонтироваться.

Заставляем mount перечитать данные из /etc/fstab:

mount -a

Проверить, что всё хорошо, и у нас появилось новое место командой:

df -h

Дальше делаем дамп базы старого сервера прямо сюда, на новый, в эту удалённую папку:

ssh root@192.168.0.1 mysqldump -udbuser -pdbpass dbname > /remote/dump.sql

Здесь:

  • root@192.168.0.1 — данные для подключения к старому серверу.
  • dbuser, dbpass и dbname — соответственно данные, для подключения к базе на старом сервере.

Ну и теперь осталось дело за малым — восстановить базу из дампа на новом сервере:

mysql -udbuser -pdbpass dbname < /remote/dump.sql

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

Для того, чтобы отмонтировать папку, удалите строку из /etc/fstab и выполните команду:

umount -l /remote

Нужна профессиональная удалённая помощь с сервером, сайтом, компьютером или ноутбуком?

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

Обсудить задачу

Помогла статья? Поблагодари автора!

Остались вопросы, или есть что добавить? Добро пожаловать в комментарии.

Угостить автора чашечкой кофе