262_Mongodb_备份恢复
评估备份方案两个指标
下面两个指标决定全备份和增备的时间间隔
- 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 |
导入前删除 |
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
- 点赞
- 收藏
- 关注作者
评论(0)