mongodb-备份和恢复

发布时间 2023-06-30 23:20:09作者: 原来是你~~~
1、mongoexport/mongoimport 备份工具

导入/导出的是JSON格式或者CSV格式

mongoexport具体用法如下所示:

  • -h:指定数据库主机的 IP 地址

  • -u:指定数据库的用户名

  • -p:指定数据库的密码

  • -d:指定数据库的名字

  • -c:指定 collection 的名字

  • -f:指定导出那些列

  • -o:指定到要导出的文件名

  • -q:指定导出数据的过滤条件

  • --authenticationDatabase admin ,用户认证数据库

准备数据,进行备份

> use test
> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
Date()}); }

$ mongoexport -uroot -proot123 --port 38017 --authenticationDatabase admin -d test -c log -o /mongodb/log.json
2023-06-30T22:41:08.665+0800	connected to: mongodb://localhost:38017/
2023-06-30T22:41:08.792+0800	exported 9999 records

$ more /mongodb/log.json 
{"_id":{"$oid":"649ee1ea168724a7ed39adaf"},"uid":1.0,"name":"mongodb","age":6.0,"date":{"$date":"2023-06-30T14:08:42.307Z"}}
{"_id":{"$oid":"649ee1eb168724a7ed39adb0"},"uid":2.0,"name":"mongodb","age":6.0,"date":{"$date":"2023-06-30T14:08:43.493Z"}}
{"_id":{"$oid":"649ee1eb168724a7ed39adb1"},"uid":3.0,"name":"mongodb","age":6.0,"date":{"$date":"2023-06-30T14:08:43.506Z"}}

默认导出 json 格式,需要导出CSV格式的数据,则需要使用--type=csv参数

Mongodb中的mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。该工具可以导入JSON格式数据,也可以导入CSV格式数据。具体使用如下所示:

  • -h:指定数据库主机的IP

  • -u:指定数据库的用户名

  • -p:指定数据库的密码

  • -d:指定数据库的名字

  • -c:指定 collection 的名字

  • -f:指定要导入那些列

  • -j, --numInsertionWorkers= number of insert operations to run
    concurrently (defaults to 1) 并行导入

$ mongoimport -uroot -proot123 --port 38017 --authenticationDatabase admin -d test -c log1 /mongodb/log.json 
2023-06-30T22:55:39.921+0800	connected to: mongodb://localhost:38017/
2023-06-30T22:55:41.339+0800	9999 document(s) imported successfully. 0 document(s) failed to import.

导入 csv 格式文件

## csv 格式的文件头行,有列名字。
## --headerline:指明第一行是列名,不需要导入。
mongoimport -uroot -proot123 --port 38017 --authenticationDatabase admin -d test -c log5 --type=csv --headerline --file /mongodb/log.csv

## csv格式的文件头行,没有列名字
mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log6 -j 4 --type=csv -f id,name,age,date --file /mongodb/log.csv

异构数据库数据迁移,MySQL 和 mongodb 数据迁移,通过 csv 格式数据文件进行导入导出。

如何将MySQL大量表迁移到MongoDB

1、批量从MySQL导出多张表

$ mysqldump --fields-terminated-by ',' --fields-enclosed-by '"' world -T /tmp/
$ cd /data/backup
$ rm -rf /data/backup/*.sql
$ find ./ -name "*.txt" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.txt ./{}.csv

2、 拼接语句

> select concat("mongoimport -uroot -proot123 --port 27017 --
authenticationDatabase admin -d ",table_schema, " -c ",table_name ," --type=csv
"," -f ", group_concat(column_name) ," --file /data/backup/",table_name
,".csv")
from information_schema.columns where table_schema='world' group by table_name;

3、mongodb 导入数据

2、mongodump/mongorestore工具

导入/导出的是BSON格式