【发布时间】:2012-12-22 09:30:29
【问题描述】:
我希望创建一个可以从终端运行的部署脚本,它会自动从存储库部署我的站点。我确定的步骤是:
- 通过 SSH 连接到远程服务器
- 从远程存储库获取最新版本的站点
- 运行任何 SQL 补丁
- 清理并退出
我已经在我的 shell 文件中放置了 SSH 连接和git pull 命令,但我坚持的是 MySQL,它本身就是一个(交互式?)shell。所以在我的文件中我有:
#!/bin/bash
# connect to remote server via SSH
ssh $SSH_USER@$SSH_HOST
# update code via Git
git pull origin $GIT_BRANCH
# connect to the database
mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME
# run any database patches
# disconnect from the database
# TODO
exit 0
如您所见,我正在连接数据库,但不确定如何执行任何 MySQL 语句。
目前,我有一个目录,其中包含按数字顺序排列的 SQL 补丁。所以 1.sql、2.sql 等等。然后在我的数据库中,我有一个表,它只记录要运行的最后一个补丁。所以我需要做一个SELECT 语句,读取要运行的最后一个补丁,然后运行任何必要的补丁。
- 如何在我的 shell 脚本中向
mysql提示符发出SELECT语句? - 那么正常的流程是什么?关闭连接并重新打开它,将补丁文件作为输入传递?还是在一个连接中运行所有必需的补丁?
- 我假设我将检查最后一个补丁文件,并为中间的任何补丁执行
do循环?
非常感谢您的帮助。
【问题讨论】:
-
这对你来说可能是一个很好的答案:How to execute Mysql command from a shell script? * 来自另一个 stackoverflow 问题
-
ssh命令也会给你一个交互式的shell。您还需要将命令通过管道传输到 SSH,或者告诉它在远程计算机上执行特定文件。