0

ターミナルから実行できるデプロイ スクリプトを作成しようとしています。これにより、リポジトリからサイトが自動的にデプロイされます。私が特定した手順は次のとおりです。

  • 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. シェル スクリプトでSELECTステートメントをプロンプトに発行するにはどうすればよいですか?mysql
  2. では、通常の流れはどうなるでしょうか?接続を閉じてから再度開き、パッチ ファイルを入力として渡しますか? または、必要なすべてのパッチを 1 つの接続で実行しますか?
  3. 最後のパッチ ファイルをチェックしてdo、その間にあるパッチのループを実行すると思いますか?

ここで助けていただければ幸いです。

4

3 に答える 3

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
于 2013-01-08T15:22:27.733 に答える
0

Perl などを使用して mysql から出力を取得できます。これは、制御フローを実行するために使用できます。

mysql コマンドを入力するのと同じようにファイルに入れます。

次に、次のように実行しますmysql -u <user> -p -h <host> < file.sqlcommands

「-e」を使用して、mysql コマンド ラインにクエリを配置することもできます。「select max(patch) from .」を入力します。スクリプトで出力を読み取ります。

于 2013-01-08T14:01:09.323 に答える
0
cat *.sql | mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME
于 2013-01-08T14:12:34.877 に答える