我正在尝试创建一个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