【发布时间】:2015-04-21 13:27:53
【问题描述】:
例如,我在1.2.3.4 上运行了mongod 实例,并且在100.90.80.1 上还有另一个备份服务器。
我需要使用以下 bash 脚本将 mongodb 数据从 1.2.3.4 备份到 100.90.80.1:
#!/bin/bash
set -e
MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="1.2.4.4"
MONGO_PORT="27017"
MONGO_DATABASE="db"
MONGO_USERNAME="login"
MONGO_PASSWORD="pass"
TIMESTAMP=`date +%F-%H%M`
BACKUP_FILE_PATH="/var/backups/tokumx-backup-$TIMESTAMP"
error_exit()
{
echo "Backup TokuMX filed due Error: $1" 1>&2
rm -rf $BACKUP_FILE_PATH
rm -rf $BACKUP_FILE_PATH.tar
exit 1
}
# Create backup
$MONGODUMP_PATH --host $MONGO_HOST --port $MONGO_PORT --db $MONGO_DATABASE --use
rname $MONGO_USERNAME --password $MONGO_PASSWORD --out $BACKUP_FILE_PATH
# Make archive
tar cf $BACKUP_FILE_PATH.tar -C $BACKUP_FILE_PATH/ .
# Remove backup folder
rm -rf $BACKUP_FILE_PATH
但由于/etc/mongodb.conf 中的此选项,我无法连接到1.2.3.4
bind_ip = 127.0.0.1
我知道我可以将上述限制更改为bind_ip = 0.0.0.0,但这并不安全。
使用上面的 bash 脚本与远程 mongod 服务器建立安全连接并将文件备份到另一个服务器的最佳方法是什么?
P.S:我运行上面的脚本如下:
sudo sh /scripts/tokumx_backup_script
【问题讨论】:
-
使用 SSH 隧道怎么样? (使用带有 -L 开关的 ssh 命令)。
-
你能举个例子吗?
-
我可以,但它到处都有记录。例如:blog.trackets.com/2014/05/17/… 要点是您使用 SSH 从备份机器连接到活动机器。您将“ -L 127.0.0.1:xxx:127.0.0.1:27017 ”参数添加到 ssh 命令。然后你可以连接到备份机器上的 XXX 端口并访问你的 mongodb 服务器,就好像它在本地监听一样。我建议阅读 ssh 文档,因为它有很好的文档,你可以在网上找到很多例子。
-
我像下面的
sudo sh /scripts/tokumx_backup_script一样运行我的 bash 脚本,那么我该如何更改它以通过 ssh 工作? -
你需要在后台运行 ssh,因为它会阻塞执行。假设您可以通过这种方式从备份连接到 live:“ ssh user01@live ”。然后你应该运行这样的东西:“ ssh -nNT -L 11111:127.0.0.1:27017 user01@live ”。当此命令运行时,您可以在本地连接到端口 11111。要在后台运行它,请使用“ssh .... &”。然后杀了它。
标签: bash mongodb mongodump remote-backup tokumx