262_Mongodb_备份恢复

网友投稿 615 2022-05-29

评估备份方案两个指标

下面两个指标决定全备份和增备的时间间隔

1 RPO recovery point objective 数据库可以承受多少时间的数据丢失  (增备)

2 RTO recovery time objective  数据库可以承受多长时间的停机 (全备)

MongoDB的逻辑/物理备份

逻辑备份:通过命令导出/导入数据文件

物理备份: 直接复制硬盘上的数据文件,

逻辑备份 mongodump和mongorestore

a.介绍

mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘;无法迁移系统库admin和local

直接对mongos & mongod进行操作,备份的数据及数据结构以BSON格式存储

mongodump 命令依赖游标,每次备份将数据加载到内存,吃性能(内存/IO) 适合小型/单一数据库备份中

mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和Mongodb实时数据相等

b mongodump & mongorestore参数

$ mongodump –help

$ mongorestore –help

参数说明:

公共参数

-h

--host 指明数据库宿主机的IP

--port  数据库端口

-u

--username 指明数据库的用户名

-p

--password 指明数据库的密码

-d

--db 指明数据库的名字

-c

--collection 指明collection的名字

--authenticationDatabase 认证数据库

-j

--numParallelCollections= number of collections to dump in parallel (4 by default)

mongodump

-q

--query 指明导出数据的过滤条件

-o

--out 指明到要导出的文件名

--oplog 备份的同时备份oplog

--numParallelCollections= number of collections to dump in parallel (4 by default)

mongorestore

--dir

恢复备份文件存放的位置

--drop

先对目标数据库中数据删除,在进行恢复

c mongodump和mongorestore基本使用

全库备份 mkdir /mongodb/backup -p mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup --备份test库 $ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -o /mongodb/backup/ --备份test库下的log集合 $ mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log -o /mongodb/backup/ --压缩备份 mongodump -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup/ --gzip --全备中恢复单库 $ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d world /mongodb/backup/test --gzip --全备中恢复单表 [mongod@db01 backup]$ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d a -c t1 /mongodb/backup/test/city.bson.gz --gzip --drop表示恢复的时候把之前的集合drop掉(危险) $ mongorestore -uroot -proot123 --port 27017 --authenticationDatabase admin -d test --drop /mongodb/backup/test

2  数据导出mongoexport & 导入mongoimport

与备份不同, 导出是以集合为单位, 只导出数据本身,并不能保证数据导出后的字段类型,且导出的数据可以直接阅读 (json & csv格式可选)

导出与备份类似; 多了欲导出的字段和导出的文件格式

参数汇总

公共参数

-p

-h

-d

-c

--port –password

--host ip地址

--db 数据库

--collection 集合

-u

-p

--username --password 用户名 & 密码

--authenticationDataabase 认证数据库

-f

--fields 导出字段,用逗号分库,默认导出所有字段

Mongoexport

-q

导出数据的筛选条件,默认全部条件

--type

CSV JSON 默认json

-o

--out 导出路径

Mongoimport

--headerline

如果知道第一行是字段名,则无需导入,导入CSV时候使用,后面不需要加变量,与 –f 互斥

--file

导入文件路径

--drop

262_Mongodb_备份恢复

导入前删除

use test for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); } 1.单表备份至json格式 mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log -o/mongodb/log.json 注:备份文件的名字可以自定义,默认导出了JSON格式的数据 2. 单表备份至csv格式 如果我们需要导出CSV格式的数据,则需要使用--type=csv参数: mongoexport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log --type=csv -f uid,name,age,date -o /mongodb/log.csv 数据恢复: 1.恢复json格式表数据到log1 mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log1 /mongodb/log.json 2.恢复csv格式的文件到log2 上面演示的是导入JSON格式的文件中的内容,如果要导入CSV格式文件中的内容,则需要通过--type参数指定导入格式,具体如下所示: 注意: (1)csv格式的文件头行,有列名字 mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log2 --type=csv --headerline --file /mongodb/log.csv (2)csv格式的文件头行,没有列名字 --headerline:指明第一行是列名,不需要导入 mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c log3 -j 4 --type=csv -f id,name,age,date --file /mongodb/log.csv

异构mysql2MongoDB迁移_字段顺序可能不准 例 异构平台迁移案例(离线) mysql2mongodb world数据库下city表进行导出,导入到mongodb (1)mysql开启安全路径 vim /etc/my.cnf --->添加以下配置 secure-file-priv=/data/backup/ /etc/init.d/mysqld restart --重启数据库生效 (2)导出mysql的city表数据 select * from world.city into outfile '/tmp/t100w.csv' fields terminated by ',' ENCLOSED BY '"' ; (3)获取列信息 mysql> select table_name,group_concat(column_name) from information_schema.columns where table_schema='test' group by table_name order by null ; +------------+---------------------------+ | TABLE_NAME | group_concat(column_name) | | t100w | dt,id,k1,k2,num | +------------+---------------------------+ 在mongodb中导入备份 mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test -c city --type=csv -f ID,Name,CountryCode,District,Population --file /tmp/t100w.csv use world db.t100w.find({});

将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) 导入数据 [mongod@db01 backup]$ ll total 256 -rwxrwxrwx 1 mysql mysql 184355 Jul 22 13:45 city.csv -rwxrwxrwx 1 mysql mysql 38659 Jul 22 13:45 country.csv -rwxrwxrwx 1 mysql mysql 26106 Jul 22 13:45 countrylanguage.csv -rwxrwxrwx 1 mysql mysql 656 Jul 22 13:45 import.sh [mongod@db01 backup]$ sh import.sh

MongoDB 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:机器人编程趣味实践15-遥控到自动(AutoAvoidObstacles)
下一篇:274_DBA_执行计划_extra
相关文章