好吧,最近我遇到了一个奇怪的行为。我有一个小型 bash 脚本,它只是远程获取 mysql 转储,然后将数据存储在服务器本身上,稍后再将其同步到备份服务器。
#!/bin/sh
/usr/bin/ssh -p 82001 user@remotehost "mysqldump -u db_user -pSomePass mydb" | gzip -c > /sql/mybackup.sql.gz
但我看到文件是在 /sql 下的本地服务器上创建的,而不是在远程服务器上创建的。
这是否意味着 mysqldump 正在远程服务器上工作,然后数据通过网络传输到本地机器,然后压缩并存储在此处所需的文件中..而不是在远程?
答案1
管道符号后的命令gzip -c > /sql/mybackup.sql.gz
正在本地机器上运行。
你应该使用
/usr/bin/ssh -p 82001 user@remotehost "mysqldump -u db_user -pSomePass mydb | gzip -c > /sql/mybackup.sql.gz"
例子:
% ssh user@host "echo remote" | echo local
local
user@host's password:
% ssh user@host "echo remote | echo local"
user@host's password:
答案2
ssh
这并不奇怪,您正在shell 中通过管道传输命令的输出;您应该在远程服务器的 shell 中通过管道传输它:
#!/bin/sh
/usr/bin/ssh -p 82001 user@remotehost "mysqldump -u db_user -pSomePass mydb | gzip -c > /sql/mybackup.sql.gz"
还要注意,你不是在使用bash
,而是sh
使用 。使用方法bash
:
#!/bin/bash
/usr/bin/ssh -p 82001 user@remotehost "mysqldump -u db_user -pSomePass mydb | gzip -c > /sql/mybackup.sql.gz"