音标 | 翻译 | |
---|---|---|
dump | [dʌmp]:[dang’ mu’ pu] | 转储;倾倒;抛弃;甩 |
deny | denied | [dɪˈnaɪ] :[di’ nai] | 否认;否定;拒绝承认 |
directory | [dəˈrektəri] :[di’ ruai 'ke ‘ te 'rui] | 目录 |
>mongodump -h dbhost -d dbname -o dbdirectory
实例:
docker exec -it mymongo mongodump -h localhost -u root -p 123456 -o /tmp/test
参数 | 作用 | 备注 |
---|---|---|
mongodump | 备份命令 | |
**-h ** | MongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017 | |
-d | 需要备份的数据库实例,例如:test | |
-o | 备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据 |
备份的内容是在容器中;
**不要尝试在主机目录中寻找备份的内容, **
需要docker exec -it [container] bash 进入容器内查找
>mongorestore -h <:port> -d dbname
参数 | 作用 | 备注 |
---|---|---|
**mongorestore ** | 恢复命令 | |
-h | MongoDB 所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017 | |
-d | 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2 | |
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test | 不能同时指定 | |
–dir | 指定备份的目录 | 不能同时指定 |
docker exec -it mymongo mongorestore -h localhost -u root -p 123456 --dir /tmp/test
不能同时指定
docker exec -it mymongo mongorestore -h localhost -u root -p 123456 /tmp/test
├── /
| ├── mongoDB
| ├── sh
| ├── dump.sh
| ├── dump [文件夹]
| ├── admin_202211041423.tar.gz
| ├── config_202211041435.tar.gz
| ├── water_202211041423.tar.gz
| ├── shop_202211041423.tar.gz
├── /
| ├── dump
| ├── list
| ├── admin_202211041423.tar.gz
| ├── config_202211041435.tar.gz
| ├── water_202211041423.tar.gz
| ├── tmp
| ├── admin_202211041423
| ├── config_202211041435
| ├── water_202211041423
提前搭建 3.1 中主机、容器内目录树; 否则脚本执行输出:No such file or directory
dump.sh脚本说明:
dump.sh代码片段 | 作用 | 备注 |
---|---|---|
date +%Y%m%d%H%M | 202211011749 [年月日几点几分] | |
for DBNAME in ${DB_NAME_ARR[@]} | ${DB_NAME_ARR[@]}数组中的所有数据库 | ${arr1[@]} 或 ${arr1[*]} 表示的是数组的所有元素 |
# dump.sh 执行文件
MONGODB_CONTAINER_NAME=你的mongoDB容器名字
DUMP="docker exec -it ${MONGODB_CONTAINER_NAME} "
# 临时备份路径(注:docker 容器内的路径)
OUT_DIR=/dump/tmp
# 压缩后的备份存放路径(注:docker 容器内的路径)
TAR_DIR=/dump/list
# 当前系统时间 等价:DATE=$(date +%Y%m%d%H%M)
DATE=`date +%Y%m%d%H%M`
# 数据库账号
DB_USER=user
# 数据库密码
DB_PASS=password
# 数据库名称,多个用空格隔开
DB_NAME_ARR=("admin config")
# 代表24小时内的保留
DAYS=1# 最终保存的数据库备份文件
for DBNAME in ${DB_NAME_ARR[@]}
do# 删除临时目录内容rm -rf $OUT_DIR/*# 文件名称:数据库名_时间FILE_NAME="${DBNAME}_${DATE}"# 导出数据的临时目录TARGET_DIR="$OUT_DIR/$FILE_NAME"mkdir -p $TARGET_DIR# 临时目录打包压缩后的文件TARGZ_FILE="${FILE_NAME}.tar.gz"# 存放压缩后文件的目录TARGET_FILE="$TAR_DIR/$TARGZ_FILE"# 执行导出命令# $DUMP -h 127.0.0.1:27017 -u $DB_USER -p $DB_PASS -d $DBNAME -o $OUT_DIR/$DATE$DUMP mongodump -h 43.143.147.51:27017 -d $DBNAME -o $TARGET_DIR# 判断导出结果flag=`echo $?`if [ $flag == "0" ];thenecho "database $DBNAME success backup to $TARGET_DIR"elseecho "database $DBNAME backup fail!"fi# 压缩格式为 .tar.gz 格式# -P tar 默认采用相对路径压缩打包,需要(-P)允许使用绝对路径 # -v 输出 verbose 日志 $DUMP tar -zcPf $TARGET_FILE $TARGET_DIR/$DBNAME# 将容器内的压缩文件,复制到宿主机与备份脚本dump.sh同级的dump目录下docker cp ${MONGODB_CONTAINER_NAME}:$TARGET_FILE $PWD/dumpdone# 删除 $DAYS 天前的备份文件 ; [ 删除从容器拷贝到主机dump.sh脚本执行同目录下的dump文件夹中的过期文件 ]
find $PWD/dump -mtime $DAYS -delete