在shell脚本中执行MySQL命令?
我希望创建一个可以从终端运行的部署脚本,它可以从存储库自动部署我的站点。我确定的步骤是:在shell脚本中执行MySQL命令?,mysql,shell,Mysql,Shell,我希望创建一个可以从终端运行的部署脚本,它可以从存储库自动部署我的站点。我确定的步骤是: 通过SSH连接到远程服务器 从远程存储库获取站点的最新版本 运行任何SQL修补程序 清理并退出 我已经在我的shell文件中放置了SSH连接和git pull命令,但是我一直使用的是MySQL,它本身就是一个(交互式的?)shell。因此,在我的文件中,我有: #!/bin/bash # connect to remote server via SSH ssh $SSH_USER@$SSH_HOST
- 通过SSH连接到远程服务器
- 从远程存储库获取站点的最新版本
- 运行任何SQL修补程序
- 清理并退出
#!/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
语句,读取要运行的最后一个补丁,然后运行任何必要的补丁
mysql
提示符发出SELECT
语句do
循环非常感谢您的帮助。您可以使用Perl或类似工具从mysql获得输出。这可以用来做你的控制流 将mysql命令输入到文件中 然后作为:
mysql-u-p-h
运行
您还可以使用'-e'将查询放在mysql命令行上。将您的“select max(patch)from.”放入脚本中,并读取脚本中的输出。假设您希望在远程端完成所有业务:
cat *.sql | mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME
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
ssh$ssh_USER@$ssh_HOST如何工作,因为我需要在文件系统上循环,解析补丁文件的内容,然后将它们作为MySQL语句执行?您将整个补丁文件作为输入。请看一下“mysqldump”的输出。但是补丁将是单个文件,而不是整个文件。比如说,要运行的最后一个修补程序可能是5.sql(如数据库表中所记录的),但我已经创建了6.sql和7.sql-因此我希望运行6.sql和7.sql。您需要按顺序运行每个修补程序吗?运行第一个查询以获取“最新的unrun补丁”,然后使用此输出循环这些补丁并按顺序运行它们。您的“取消运行补丁程序”可以是“可用补丁程序”和“为给定主机运行的补丁程序”之间的连接。选择“ifnull”(使其成为左连接)。这可能是一个很好的答案:*从另一个stackoverflow问题中,ssh
命令也将为您提供一个交互式shell。您还需要将命令导入SSH,或者告诉它在远程计算机上执行特定的文件。