我试图发出一个远程mysqldump命令,将stdoutredirect到一个dmp文件,然后tar。
对于如何通过ssh执行redirect位,我有点困惑:
即
ssh [email protected] mysqldump $dbname -u admin -p > dbdump.dmp && tar cvzf dbdump.tar.gz dbdump.dmp
问题:
1)我没有提供密码,因为我想让它提示我。 请问一个SSH远程命令处理这个? 2)什么是语法处理? 我想用引号,还是不是? redirect和pipe道会发生什么? 那些必须以特殊的方式逃脱或格式化吗?
当你连接到另一台主机时,SSH在服务器端执行给定的命令(如果没有给定的话,它启动一个shell),转发所有的stdin / stdout / stderrstream。 ssh命令在>处结束。 这意味着mysql命令的输出被redirect到客户端的文件dbdump.dmp 。 然后,仍然在客户端,从该文件创build一个tar档案。
如果你把整个命令string放在Dom提出的引号中,它将在远程端完全运行,这样你就可以在服务器上获得这些文件。
理论上,密码的东西也应该工作(因为标准inputstream不redirect,但只是通过),但它没有在这里。
您可以将密码放在.my.cnf (如果您想要额外的安全性,请为备份创build一个额外的用户)。 您也可以使用该帐户的公共密钥login ,这样它将完全无需您的交互工作。
顺便说一句:为什么你创build转储的tar档案? 如果你只需要压缩, gzip或类似的东西就足够了。
你想要在哪台计算机上执行tar? 如果是在服务器上,则需要引用所有行: ssh [email protected] "mysqldump $dbname -u admin -p > dbdump.dmp && tar cvzf dbdump.tar.gz dbdump.dmp"如果不我认为行结束将在本地执行,并且不会工作,因为您没有dbdump文件对于1),没有问题。 如果需要密码,将会被询问。 [编辑] OOPS,我仔细检查,你讲的MySQL密码,而不是SSH! 我想不过,它会被问[EDIT2]只需检查,它与引用的工作:首先是SSH密码问,然后,MySQL的密码