如何使用 SSH 隧道编写数据库迁移脚本?

Tha*_*you 7 ssh bash mysql shell-script ssh-tunnel

我正在尝试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
# ...
Run Code Online (Sandbox Code Playgroud)

当我只运行脚本的 mysql 部分时,我得到了这个输出:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Enter password: 
Run Code Online (Sandbox Code Playgroud)

我们已经设置了 ssh 密钥,我可以正确地 ssh 到远程。但是,在脚本上下文中运行时,事情会出错。我想我只是一个彻头彻尾的 bash 菜鸟。我猜如果我只是改变我的方法的结构,我应该没有问题。我只是不知道该怎么做...

InC*_*fIT 7

只需使用一个命令拉出转储:

ssh user@host 'mysqldump -u -p 数据库名' > /path/to/local/file.sql

如果您的数据库很大,您也可以压缩这些:

ssh user@host 'mysqldump -u -p 数据库名 | gzip' > /path/to/local/file.sql.gz

然后用枪压缩它。