2013-01-08 3 views
0

터미널에서 실행할 수있는 배포 스크립트를 만들고 저장소에서 자동으로 사이트를 배포하려고합니다. 내가 발견 한 단계는 다음과 같습니다쉘 스크립트에서 MySQL 명령을 실행 하시겠습니까?

  • 연결을 원격 서버에 SSH를 통해
  • 원격 저장소에서 사이트의 최신 버전을 가져 오기
  • 실행되는 SQL 패치까지
  • 깨끗하고 종료

쉘 파일에 SSH 연결과 git pull 명령을 넣었지만, 내가 갇혀있는 것은 MySQL과 (대화 형?) 셸 자체입니다. 그래서 내 파일에 내가 가진 : 당신이 볼 수 있듯이, 나는 데이터베이스에 연결,하지만 어떤 MySQL의 문을 실행하는 방법을 잘 모르겠어요

#!/bin/bash 

# connect to remote server via SSH 
ssh [email protected]$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 

.

현재 SQL 패치가 포함 된 디렉토리가 있습니다. 그래서 1.sql, 2.sql, 등등. 그런 다음 데이터베이스에 마지막으로 실행될 패치를 기록하는 표가 있습니다. 따라서 SELECT 문을 수행하고 실행될 마지막 패치를 읽은 다음 필요한 패치를 실행해야합니다.

  1. 은 어떻게 쉘 스크립트에서 mysql 프롬프트로 SELECT 성명을 발표합니까?
  2. 그러면 정상적인 흐름은 무엇입니까? 연결을 닫고 다시 열어서 패치 파일을 입력으로 보냅니 까? 또는 하나의 연결에서 필요한 모든 패치를 실행 하시겠습니까?
  3. 나는 마지막 패치 파일을 검사 할 것이고 그 사이에 어떤 패치라도 do 루프를 수행한다고 가정합니까?

도움말 여기에 크게 감사하겠습니다.

+0

은'ssh' 명령은 또한 당신에게 대화 형 쉘을 제공 할 것입니다. 명령을 SSH로 파이프하거나 원격 컴퓨터에서 특정 파일을 실행하도록 명령해야합니다. –

+0

이것은 아마도 당신에게 좋은 대답 일 것입니다 : [쉘 스크립트에서 Mysql 명령을 실행하는 방법?] (http://stackoverflow.com/questions/8055694/how-to-execute-mysql-command-from-a-shell- script) * 다른 stackoverflow 질문 –

답변

0

mysql에서 Perl 또는 유사한 것을 사용하여 출력을 얻을 수 있습니다. 이것은 제어 흐름을 수행하는 데 사용될 수 있습니다.

mysql 명령을 파일에 입력하십시오.

그런 다음 실행하십시오 : mysql -u <user> -p -h <host> < file.sqlcommands.

'-e'를 사용하여 mysql 명령 줄에 쿼리를 넣을 수도 있습니다. '최대 (패치) 선택'을 입력하십시오. 스크립트의 출력을 읽습니다.

+0

파일 시스템을 루프 처리하고 내 패치 파일의 내용을 구문 분석 한 다음이를 MySQL 문으로 실행해야 할 때 어떻게 작동합니까? –

+0

전체 패치 파일을 입력으로 넣습니다.'mysqldump'의 출력을 살펴 보자. – ethrbunny

+0

그러나 패치는 전체 파일이 아닌 개별 파일입니다. 말하자면, 마지막 패치는 ** 5.sql ** (데이터베이스 테이블에 기록 된 것) 일지 모르지만, 나는 ** 6.sql **과 ** 7.sql **을 만들었습니다. 그래서 ** 6. SQL ** 및 ** 7. SQL **을 좋아합니다. –

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

원격 측에 모든 사업을하려는 가정 :

ssh [email protected]$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 
관련 문제