我正在尝试从防火墙后面进行远程备份。将其分解为在 crontab 中调用的自己的脚本确实没有问题,但这并不好玩!我尝试使用:
pg_dump -U my_user my_database | ssh me@myserver "> backup.sql"
是备份一个 postgresql 数据库(将所有内容转储到 stdout)并将其重定向到远程 ssh 命令,该命令只需将其放在 backup.sql 中。
不幸的是,我在远程机器上得到的只是一个空的“backup.sql”。重定向不是我的强项,所以任何提示都值得感激。谢谢。
答案1
尝试
pg_dump -U my_user my_database | ssh me@myserver "cat > backup.sql"
答案2
更好的是:在 SSH 之前压缩它:
pg_dump -U my_user my_database | gzip -c | ssh me@myserver "cat > backup.sql.gz"
这通过 SQL 转储节省了大量带宽。
我实际上是反过来做的。我让备份服务器登录到要备份的服务器。这意味着如果任何一台服务器(除了备份服务器,它的安全性非常严苛)在根级别受到威胁,备份服务器 - 以及所有其他服务器! - 默认情况下不会受到威胁。
因此,我远程执行 SQL 转储的命令略有不同:
ssh <server> "pg_dump -U <user> <database> | gzip -c" > /backups/sqlbackup.sql.gz
特别注意引号的位置 - 它们定义了在远程端执行的内容以及在本地执行的内容。