SSH를 사용하여 데이터베이스 마이그레이션을 스크립트하는 방법은 무엇입니까?

SSH를 사용하여 데이터베이스 마이그레이션을 스크립트하는 방법은 무엇입니까?

저는 sync.sh우리 웹사이트의 이상적이지 않은 버전 관리와 조화를 이루는 스크립트를 만들려고 노력하고 있습니다. 이 스크립트는 몇 가지 다른 사항과 함께 라이브 데이터베이스의 복사본을 로컬 개발 환경으로 마이그레이션합니다. mysql 마이그레이션 부분에 문제가 있습니다.

스크립트는 개발 컴퓨터에서 실행됩니다. remote생방송 진행자입니다.

# --------------
# database

# ssh tunnel
ssh -L 3307:remote:3306 user@remote

# mysql dump
mysqldump -u someuser -h remote -P 3307 -p"p4ssw0rd" db > localfile.sql

# somehow close ssh tunnel ???

# populate local db with sql dump file
mysql -ulocal db < localfile.sql

# -----------------
# other sync stuff
# ...

스크립트의 mysql 부분을 실행하면 다음과 같은 결과가 나타납니다.

Pseudo-terminal will not be allocated because stdin is not a terminal.
Enter password: 

SSH 키가 설정되어 있고 원격으로 올바르게 SSH를 연결할 수 있습니다. 그러나 스크립트 컨텍스트에서 실행하면 문제가 발생합니다.

답변1

다음을 사용하여 터널링 없이 한 줄로 이 작업을 수행할 수 있습니다.

$ ssh user@remote "mysqldump -u user --password=password database_name" | 
  mysql -u local database_name

관련 정보