🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 一 备份恢复工具介绍 mongodb有两款备份恢复工具,分别是 * mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式 * mongodump/mongorestore 导入/导出的是BSON格式。 ### 两种格式区别 JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。 * json的优劣: JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。 * bson的优劣 BSON格式可能会随mongodb版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功 当无法使用BSON进行跨版本的数据迁移的时候,可使用JSON格式 ## 二 JSON格式工具使用 ### A 导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。 可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。 **mongoexport参数说明** ``` $ mongoexport --help -h:指明数据库宿主机的IP -u:指明数据库的用户名 -p:指明数据库的密码 -d:指明数据库的名字 -c:指明collection的名字 -f:指明要导出那些列 -o:指明到要导出的文件名 -q:指明导出数据的过滤条件 --authenticationDatabase admin ``` **单表备份至json格式** ```sh mongoexport -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah -c log \ -o /tmp/log.json ``` **单表备份至csv格式** 如果我们需要导出CSV格式的数据,则需要使用----type=csv参数:需要制定导出的列名 ``` mongoexport -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah -c log \ --type=csv -f uid,name,age,date \ -o /tmp/log.csv ``` ### B 导入工具mongoimport Mongodb中的mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。 该工具可以导入JSON格式数据,也可以导入CSV格式数据。具体使用如下所示: **mongoimport 参数说明** ``` $ mongoimport --help 参数说明: -h:指明数据库宿主机的IP -u:指明数据库的用户名 -p:指明数据库的密码 -d:指明数据库的名字 -c:指明collection的名字 -f:指明要导入那些列 -j, --numInsertionWorkers=<number> (defaults to 1) //并行备份 ``` **恢复json格式表数据到log1** ``` mongoimport -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah \ -c log1 /tmp/log.json ``` **恢复csv格式的文件到log2** 如果要导入CSV格式文件中的内容,则需要通过--type参数指定导入格式,具体如下所示: ``` #csv格式的文件头行,有列名字 mongoimport -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah \ -c log2 --type=csv --headerline --file /tmp/log.csv ##--headerline:指明第一行是列名,不需要导入。 #csv格式的文件头行,没有列名字 mongoimport -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d oldboy \ -c log3 --type=csv -f id,name,age,date --file /tmp/log1.csv ``` ### C 异构平台迁移案例 mysql -----> mongodb world数据库下city表进行导出,导入到mongodb 1. mysql开启安全路径 ```sh 添加以下配置 vim /etc/my.cnf secure-file-priv=/tmp #重启数据库生效 /etc/init.d/mysqld restart ``` 2. 导出mysql的city表数据 ```sh source /root/world.sql select * from world.city into outfile '/tmp/city1.csv' fields terminated by ','; ``` 3. 处理备份文件 ``` desc world.city ID | int(11) | NO | PRI | NULL | auto_increment | | Name | char(35) | NO | | | | | CountryCode | char(3) | NO | MUL | | | | District | char(20) | NO | | | | | Population #添加第一行列名信息 vim /tmp/city.csv ID,Name,CountryCode,District,Population ``` 4. 在mongodb中导入备份 ``` mongoimport -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d world \ -c city --type=csv ID,Name,CountryCode,District,Population --file /tmp/city1.csv use world db.city.find({CountryCode:"CHN"}); ``` ## 三 BSON格式工具使用 ### A mongodump和mongorestore介绍 mongodump能够在Mongodb运行时进行备份,是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。 如果我们在备份时对数据库进行了写入操作,就可能存在备份数据不一定是数据库的实时快照的问题, 另外在备份时可能会对其它客户端性能产生不利的影响。 ### B mongodump参数说明: ``` $ mongodump --help -h:指明数据库宿主机的IP -u:指明数据库的用户名 -p:指明数据库的密码 -d:指明数据库的名字 -c:指明collection的名字 -o:指明到要导出的文件名 -q:指明导出数据的过滤条件 -j, --numParallelCollections=<number> (defaults to 4) //并行备份 ``` ### C mongodump备份工具 ```sh # 1全库备份 mongodump -uroot -proot123 --port 27017 \ --authenticationDatabase admin -o /tmp/backup # 2备份world库 mongodump -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d world -o /tmp/backup/ # 3备份noah库下的log集合 mongodump -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah -c log -o /tmp/backup/ # 4压缩备份 mongodump -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah -o /tmp/backup/ --gzip mongodump -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d app -c vast -o /tmp/backup/ --gzip ``` ### D mongorestore恢复工具 ```sh # 1恢复world库 mongorestore -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d world1 /tmp/backup/world # 2恢复oldguo库下的t1集合 mongorestore -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah -c log1 --gzip /tmp/backup/noah/log.bson # 3drop表示恢复的时候把之前的集合drop掉 mongorestore -uroot -proot123 --port 27017 \ --authenticationDatabase admin -d noah --drop /tmp/backup/noah ```