5.mongodb 备份与恢复

  • mongodb备份工具介绍:

    • 1.mongoexport(备份)/mongoimport(恢复)
      • mongoexport是MongoDB提供的一个工具,用于将数据从MongoDB实例导出到JSON或CSV格式的文件中,这个工具对于数据迁移、数据备份或者在不同的数据库之间同步数据非常有用
    • 2.mongodump(备份)/mongorestore(恢复)
      • mongodump 是 MongoDB 官方提供的一个工具,用于备份 MongoDB 数据库。导出和导入的文件格式为BSON文件格式
  • 备份工具的区别:

    • mongoexport/mongoimport 导出和导入的是JSON格式或者CSV格式
    • mongodump/mongorestore 导入和导出的是BSON格式
    • JSON格式可读性较强但是体积较大,BSON则是二进制文件,体积小。
    • 在MongoDB不同的版本之间备份和恢复,BSON格式可能会随着版本不同而有所不同,所以不同版本之间使用mongodump/mongorestore备份工具可能不会成功,具体要看版本之间的兼容性。
    • 不同版本选择备份时,JSON格式由于其简单、灵活、易读,非常适合用于跨版本软件的备份和恢复工作
  • 应用场景:

    • 1.mongoexport/mongoimport:(JSON格式、CSV格式)
      • 适合异步平台迁移或同平台、跨大版本
    • 2.mongodump/mongorestore:(BSON格式)
      • 日常备份恢复时使用
  • 导出工具mongoexport:

    • 可以将一个集合导出成JSON格式或CSV格式
    • 适用于:

      • 版本差异较大
      • 异步平台数据迁移
    • mongoexport具体用法如下所示:

      • $ mongoexport --help
      • 参数说明:
      • -h:指明数据库宿主机的IP
      • -u:指明数据库的用户名
      • -p:指明数据库的密码
      • -d:指明数据库的名字
      • -c:指明collection的名字
      • -f:指明要导出那些列
      • -o:指明到要导出的文件名
      • -q:指明导出数据的过滤条件
      • --authenticationDatabase admin
    • 安装备份工具:
    • tar xf mongodb-database-tools-rhel70-x86_64-100.3.1.tgz
    • cd mongodb-database-tools-rhel70-x86_64-100.3.1/bin/
    • cp * /mongodb/bin/
    • chown -R mongod.mongod /mongodb/
    • 创建一个库和集合,填入数据用于备份测试:

      • use hehe
      • db.createCollection("log");
      • for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mysql","age":6,"date":new Date()})}
    • 创建一个超级管理员用户(可以管理所有库):

      • use admin
      • db.createUser(
      • {
      • user: "root",
      • pwd: "root123",
      • roles: [ { role: "root", db: "admin" } ]
      • }
      • )
    • 单表备份至JSON格式:

      • mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -c log -o /mongodb/log.json
    • 单表备份至CSV格式:

      • (需要使用--type=csv参数)
      • mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -c log --type=csv -f uid,name,age,date -o /mongodb/log.csv
  • 导入工具mongoimport:

    • 它是mongodb数据库提供的一个工具,用于将数据从外部导入到mongodb集合中,这个工具可以处理JSON\CSV\XML等格式的数据:
    • 参数:

      • -h:指明数据库宿主机的IP
      • -u:指明数据库的用户名
      • -p:指明数据库的密码
      • -d:指明数据库的名字
      • -c:指明collection的名字
      • -f:指明要导入那些列
      • -j:并行多开线程,默认4个
    • 恢复JSON格式表数据到log1集合:
      • mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -c log1 /mongodb/log.json
    • 恢复CSV格式的文件到log2集合:

      • 注意:

        • 1.当CSV格式的文件中,第一行存在列名的话,在导入数据时,需要指定参数:--headerline(导入的信息包含头部信息)
          • (当使用 --headerline 选项时,mongoimport 会将 CSV 文件的第一行作为字段名,并将后续的行作为数据记录导入到 MongoDB 集合中。)
        • 2.当导入的CSV格式文件中,没有列名时,在导入时可以指定参数-f,后面添加第一行的列名
      • 开始导入:

        • (1)csv格式的文件头行,有列名字
          • mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -c log2 --type=csv --headerline --file /mongodb/log.csv
        • (2)csv格式的文件头行,没有列名字
          • mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -c log3 --type=csv -f id,name,age,date --file /mongodb/log1.csv
  • 不同平台之间数据迁移案列:

    • mysql------------>mongodb
    • 1.开启mysql安全路径,用于限制只有指定目录下的数据文件可以被导出和导入

      • vim /etc/my.cnf
        • 添加:
          • secure-file-priv=/tmp
      • 重启数据库生效:
      • 补充:
    • 2.提前准备一些数据用于测试:

      • 先将数据源导入mysql中:
        • source /root/world.sql
      • 将数据导出到/tmp下:
        • select * from world.city into outfile '/tmp/city1.csv' fields terminated by ',';
          • 这是一个备份数据的公式,如果库和表名,则直接将上面的修改为自己的库和表名,就可以备份数据了。
    • 3.在mongodb数据库中导入刚才备份出来的数据:
      • mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c city --type=csv -f ID,Name,CountryCode,District,Population --file /tmp/city1.csv
        • -f:列名
    • 4.假如mysql中要迁移100张表到mongodb数据库中,以下有一个公式可以直接将导出的命令列出:

      • select concat("select * from ",table_schema,".",table_name ," into outfile '/tmp/",table_schema,"_",table_name,".csv' fields terminated by ',';") from information_schema.tables where table_schema ='world';
      • (使用时只需要修改库名即可)
  • mongodb日常数据备份:

    • mongodump介绍

      • mongodump可以在mongodb运行时进行备份。
      • 它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘、
      • 它可以创建 MongoDB 实例或集合的 BSON 文件快照
    • 参数:

      • 参数说明:
      • -h:指明数据库宿主机的IP
      • -u:指明数据库的用户名
      • -p:指明数据库的密码
      • -d:指明数据库的名字
      • -c:指明collection的名字
      • -o:指明到要导出的文件名
      • -q:指明导出数据的过滤条件
      • -j:并行备份的线程数默认是4
      • --oplog 备份的同时备份oplog

      • --authenticationDatabase admin:指定认证库
    • mongorestore介绍:
      • mongorestore是MongoDB的数据恢复工具,它可以将mongodump创建的备份文件恢复到mongoDB这个实例中
    • 使用案列:

      • 创建备份目录,将数据备份到以下目录:
        • mkdir /mongodb/backup /mongodb/backup1 /mongodb/backup2 /mongodb/backup3 /mongodb/backup4 /mongodb/backup5
      • 全库备份(备份所有):
        • mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup
      • 备份单库(参数:-d 库名)
        • mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -o /mongodb/backup1/
      • 备份指定库下的单个集合:(参数:-d 库名 -c 集合名)
        • mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -c log -o /mongodb/backup2/
    • 压缩备份:

      • 全库备份压缩:
        • mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup3/ --gzip
      • 单库压缩备份:
        • mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -o /mongodb/backup4/ --gzip
      • 单表压缩备份:
        • mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c city -o /mongodb/backup5/ --gzip
    • 恢复数据:
      • mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world /mongodb/backup/world
    • 压缩还原(--gzip:解压后还原):
      • mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe -c log --gzip /mongodb/backup3/hehe/log.bson.gz
    • 删除还原:

      • --drop表示恢复的时候把之前的集合drop掉(危险)
      • mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d hehe --drop /mongodb/backup/hehe
相关推荐
梦想平凡1 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
TianyaOAO1 小时前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong1 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
码农老起2 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
夏木~3 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21553 小时前
Liunx下MySQL:表的约束
数据库·mysql
黄名富3 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
言、雲3 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
一个程序员_zhangzhen4 小时前
sqlserver新建用户并分配对视图的只读权限
数据库·sqlserver
zfj3214 小时前
学技术学英文:代码中的锁:悲观锁和乐观锁
数据库·乐观锁··悲观锁·竞态条件