Копирование данных из STDOUT на удаленный компьютер с использованием SFTP - PullRequest
2 голосов
/ 05 мая 2010

Для резервного копирования больших разделов базы данных на удаленную машину с использованием SFTP я хотел бы использовать команду dump для базы данных и отправить ее напрямую через SFTP в удаленное местоположение.

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

Я пытался использовать python + paramiko , который предоставляет эту функциональность, но производительность намного хуже, чем при использовании собственного двоичного файла openssh / sftp для передачи файлов.

У кого-нибудь есть идеи, как это сделать с помощью нативного sftp-клиента в linux или с такой библиотекой, как paramiko? (но тот, который работает близко к нативному клиенту sftp)?

Ответы [ 2 ]

2 голосов
/ 05 мая 2010

Если у вас есть удаленный доступ к оболочке (ssh), вы можете сделать что-то вроде следующего:

fancy-sql-dump-command --to-stdout | ssh me@remotehost "cat > my-dql-dump.sql"

Google "pipe over ssh" для большего количества примеров, например этот пример с использованием tar .

0 голосов
/ 05 мая 2010

Я бы порекомендовал sshfs , который работает по протоколу SFTP.

Некоторые дистрибутивы ОС имеют этот пакет, для других вам нужно будет скомпилировать, например, на RedHat Enterprise Linux 5.4+ или его клонах, таких как CentOS:

sudo yum install fuse-devel glib-devel
sudo usermod -a -G fuse "$USER"

cd /tmp
tar xzf sshfs-fuse-2.2.tar.gz
cd sshfs-fuse-2.2
./configure
make
sudo make install

# relogin

mkdir /tmp/servername
sshfs servername:directory /tmp/servername/
ls /tmp/servername/
...