如何导入mongoDB的所有数据?

MongoDB

1 前言

一个问题,一篇文章,一出故事。
上一个章节,我们使用导出脚本导出mongoDB的数据,详细如下,

如何导出mongoDB的所有数据?


所以,本章将实现使用脚本导入mongoDB数据。

2 最佳实践

2.1 创建脚本

mkdir ~/scripts/
vim ~/scripts/mongoimportAllData.sh

加入如下配置,

#!/bin/bash

mongoHost="localhost"
mongoPort="27017"
backupDir="/backup/comchatBackup/mongoExport"
mongoImportLog="/var/log/mongodb/mongoImport.log"

cd "$backupDir"
if [ $? != 0 ]; then
        echo "`date '+%Y-%m-%d %H:%M:%S'` Backup storage '""$backupDir""' access failed!" | tee -a "$mongoImportLog"
        exit 0
fi

if [ ! -d `dirname "$mongoImportLog"` ]; then
        mkdir -p `dirname "$mongoImportLog"`
fi

echo "`date '+%Y-%m-%d %H:%M:%S'` Backup restore start!" | tee -a "$mongoImportLog"
for i in `find -name \*.json -type f | sed 's/.\///g'`; do
        importFile="$i"
        dataBase=`echo "$importFile" | cut -d"." -f1`
        collection=`echo "$importFile" | cut -d"." -f2`
        mongoimport -h "$mongoHost" --port "$mongoPort" -d "$dataBase" -c "$collection" --type=json --file "$importFile"
        if [ $? == 0 ]; then
                echo "`date '+%Y-%m-%d %H:%M:%S'` Backup restore $dataBase.$collection successfully!" | tee -a "$mongoImportLog"
        else
                echo "`date '+%Y-%m-%d %H:%M:%S'` Backup restore $dataBase.$collection failed!" | tee -a "$mongoImportLog"
        fi
done
echo "`date '+%Y-%m-%d %H:%M:%S'` Backup restore end!" | tee -a "$mongoImportLog"

2.2 执行导出操作

sh ~/scripts/mongoimportAllData.sh

执行过程中,如果遇到如下错误,

Failed: invalid JSON input. Position: 171. Character: N

“mongoimport”命令可加入如下参数解决,

--legacy

2.3 检查执行日志

cat /var/log/mongodb/mongoImport.log

错误处理参阅
===================
https://stackoverflow.com/questions/59381172/mongoimport-error-failed-invalid-json-input

没有评论

发表回复

MongoDB
如何配置mongoDB日志切割?

1 前言 一个问题,一篇文章,一出故事。 笔者今天某应用链接MongoDB异常于是去查看DB的日志, …

MongoDB
如何导出mongoDB的所有数据?

1 前言 一个问题,一篇文章,一出故事。 mongoDB的mongoexport工具貌似不支持整库导 …

MongoDB
如何熟悉mongo shell?

1 基础知识 1.1 mongo shell的概念 – mongo shell是Mong …