繁体   English   中英

在shell脚本中执行MySQL命令?

[英]Executing MySQL commands in shell script?

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

  • 通过SSH连接到远程服务器
  • 从远程存储库中获取网站的最新版本
  • 运行任何SQL补丁
  • 清理并退出

我已经在外壳文件中放置了SSH连接和git pull命令,但我坚持使用的是MySQL,因为它本身是一个(交互式的)外壳。 所以在我的文件中,我有:

#!/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.sql2.sql等。 然后,在数据库中,我有一个表,该表仅记录了要运行的最后一个补丁。 因此,我需要执行SELECT语句,读取要运行的最后一个补丁,然后运行所有必要的补丁。

  1. 如何在我的shell脚本中向mysql提示符发出SELECT语句?
  2. 那么正常流量是多少? 关闭连接并重新打开它,将补丁文件作为输入? 还是要在一个连接中运行所有必需的补丁程序?
  3. 我假设我将检查最后一个补丁文件,并为它们之间的任何补丁做一个do循环?

这里的帮助将不胜感激。

假设您想在远程进行所有业务:

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

您可以使用Perl或类似工具从mysql获取输出。 这可以用来做您的控制流程。

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

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

您也可以使用'-e'在mysql命令行上查询。 将您的“从中选择max(patch)”。 并在脚本中读取输出。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM