在shell脚本中执行MySQL命令?

时间:2013-01-08 13:57:31

标签: mysql shell

我正在寻找一个可以从终端运行的部署脚本,它会自动从存储库部署我的站点。我发现的步骤是:

  • 通过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语句,读取要运行的最后一个补丁,然后运行任何必要的补丁。

  1. 如何在我的shell脚本中向SELECT提示符发出mysql语句?
  2. 那么正常的流量是什么?关闭连接并重新打开它,传递补丁文件作为输入?或者在一个连接中运行所有必需的补丁?
  3. 我假设我将检查最后一个补丁文件,并为其间的任何补丁执行do循环?
  4. 非常感谢这里的帮助。

3 个答案:

答案 0 :(得分:1)

假设您想要在远程方面做所有业务:

ssh $SSH_USER@$SSH_HOST << END_SSH
git pull origin $GIT_BRANCH
mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME << END_SQL
<sql statements go here>
END_SQL
END_SSH

答案 1 :(得分:0)

您可以使用Perl或类似方法从mysql获取输出。这可用于控制流程。

将您的mysql命令放入文件中,就像输入它们一样。

然后运行:mysql -u <user> -p -h <host> < file.sqlcommands

您还可以使用'-e'在mysql命令行上放置查询。把你的'select max(补丁)放进去吧。并阅读脚本中的输出。

答案 2 :(得分:0)

cat *.sql | mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME