Skip to content


Копирование большой базы данных MySQL на удалённый сервер

Иногда возникает необходимость скопировать большую (несколько гигабайт) базу данных с одного сервера на другой.
Можно, конечно, использовать связку mysqldump/{scp,rsync,ftp}/mysql, но есть более эффективный способ.
Итак, на сервере-источнике поднимаем шифрованный туннель до сервера-приёмника (1.2.3.4):
root@source:~# ssh -t -L 3310:localhost:3310 -N root@1.2.3.4

На сервере-приёмнике подымаем NetCat:
root@destination:~# nc -l 127.0.0.1 3310 | pv -b > mybig_database.sql

На сервере-источнике дампим базу и перенаправляем вывод в ещё один NetCat, который в свою очередь направит поток по ssh-туннелю на сервер-приёмник:
root@source:~# mysqldump --triggers --routines --create-options mybig_database | pv -b | nc -w1 localhost 3310

Когда процесс закончится — на принимающем серевере в /root/mybig_database.sql будет лежать наш дамп.
Таким образом мы сэкономили время на пересылку файла между серверами. Если стоит задача скопировать базу между 2-мя экземплярами MySQL — можно на принимающем сервере вместе с NetCat использовать команду mysql, примерно так:
root@destination:~# nc -l 127.0.0.1 3310 | pv -b | mysql copy_of_mybig_database

Posted in Linux, LJ, Tips&Tricks.

Tagged with , , , , .


2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Tiona says

    Вася, а почему мой недо-сайт не доступен, он у тебя ж хостится?

    • Br0ziliy says

      Он хостился на моей старой конторе (где я работал зимой 2010-2011), перешли напомни доменное имя его — перенесу.