我知道我想做什么,但我无法弄明白。
我想ssh到远程网络服务器上,执行命令来转储数据库,然后关闭该数据库。
更复杂的是,我这样做是为了一个网格服务器,所以ip地址并不总是一样。
我脑子里有以下想法,但需要调整才能让它发挥作用:
!/bin/bash
ssh root@server.com
mysqldump -uroot -pxxxxx mydb > mydb.sql
mv mydb.sql /var/www/site/httpdocs/public_folder
wget www.site.com/mydb.sql
任何想法如何使这项工作?或者也许有一种方法(在同一个脚本中)我可以将其scp下来?
答案 0 :(得分:5)
ssh root@server.com "mysqldump -uroot -pxxxxx mydb" > mydb.sql
这将ssh到您的服务器并在那里执行mysqldump。 outout将在STDOUT
上,它将通过SSH会话传输并转储到本地文件mydb.sql
。
此处唯一的要求是基于密钥的ssh身份验证,否则会要求您输入的密码不会太自动化...
至于你的方法,你应该永远不会将数据库转储放入一个世界可读的webroot。这只是尖叫主要的安全问题。此外,您可能不应该使用mysql root帐户进行大部分工作。改为创建一个新的(受限制的)数据库用户。一般来说,你应该总是尽量减少权利,以避免坏人利用你的系统。
答案 1 :(得分:1)
我遇到了一些问题。我使用-t开关使它工作。
ssh root@server.com -t "mysqldump -uroot -pxxxxx mydb" > mydb.sql
在我的服务器上,我还添加了mysqldump的完整路径
ssh root@server.com -t "/usr/local/mysql/bin/mysqldump-uroot -pxxxxx mydb" > mydb.sql