SSH进入服务器并执行命令来转储数据库

时间:2012-03-27 07:56:41

标签: ssh scp

我知道我想做什么,但我无法弄明白。

我想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下来?

2 个答案:

答案 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