【问题标题】:Copying data from STDOUT to a remote machine using SFTP使用 SFTP 将数据从 STDOUT 复制到远程计算机
【发布时间】:2011-02-15 21:05:23
【问题描述】:

为了使用 SFTP 将大型数据库分区备份到远程计算机,我想使用 databases dump 命令并使用 SFTP 直接将其发送到远程位置。

当您没有足够的本地磁盘空间来创建备份文件时需要转储大型数据集,然后将其复制到远程位置,这很有用。

我尝试过使用提供此功能的 python + paramiko,但性能比使用本机 openssh/sftp 二进制文件传输文件要差得多。

有没有人知道如何使用 linux 上的本机 sftp 客户端或类似 paramiko 的库来执行此操作? (但执行接近原生 sftp 客户端)?

【问题讨论】:

    标签: postgresql ssh sftp database-backups remote-backup


    【解决方案1】:

    如果您有远程 shell 访问 (ssh),您可以执行以下操作:

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

    谷歌“通过 ssh 管道”获取更多示例,例如this example using tar.

    【讨论】:

    • 这将在 sftp 服务器上工作,这些服务器也提供带有 shell 的 ssh 和访问 cat,但不适用于不提供 shell 或不提供“cat”的服务器,这就是我想要的原因使用本机 sftp
    【解决方案2】:

    我推荐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/
    

    【讨论】:

    • 不幸的是,sshfs 的性能不是很好(考虑一次传输 >10GB 的文件)。所以感谢您的建议,但这仍然不能解决我的问题。
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2014-06-18
    • 2018-03-12
    相关资源
    最近更新 更多