服务器系统搭建的重要性与挑战,如何实现高效与安全的管理?
592
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
导入前删除
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小时内删除侵权内容。