Você poderia fazer isso em uma linha sem o túnel usando algo como:
$ ssh user@remote "mysqldump -u user --password=password database_name" |
mysql -u local database_name
Estou tentando criar um script sync.sh
que coordena com nosso controle de versão abaixo do ideal para o nosso site. Este script irá migrar uma cópia do banco de dados ativo para o nosso ambiente de desenvolvimento local e algumas outras coisas. Estou tendo problemas com a parte de migração do mysql.
Este script é executado em uma máquina de desenvolvimento. remote
é o host ativo.
# --------------
# 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
# ...
Quando apenas executo a parte do mysql do script, recebo esta saída:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Enter password:
Temos a configuração das chaves ssh e posso enviar ssh para o controle remoto corretamente. No entanto, quando executado no contexto do script, as coisas estão dando errado.
Tags ssh mysql shell-script