mongodump & mongorestore
单库备份
## -o 输出目录
mongodump --host 127.0.0.1 --port 27032 -u xxx -p xxx --db test2 --oplog -o ./test2
全库备份
--oplog只能在副本集中使用,因为副本集初始化的时候生成oplog,单实例使用--oplog会报错。
mongodump --host 127.0.0.1 --port 27030 -u user1 -p user1 --authenticationDatabase admin --oplog -o ./test07
全量备份的时候且使用--oplog的时候,会有一个bson文件,里面存了时间戳。可用于增量备份。需要使用bsondump命令查看该文件的时间戳。
bsondump testOp2/oplog.bson
全库恢复
## 可以增加参数 --drop,将已存在的库删除再重新创建
mongorestore --host 127.0.0.1 --port 27039 -u user1 -p user1 --authenticationDatabase admin --oplogReplay ./testOp2
增量恢复
先增量备份,查看上次全量备份的bson文件中的时间戳,然后从local库中的oplog.rs集合中通过指定时间戳备份增量数据,再根据导出的增量备份文件进行增量恢复。
增量备份
mongodump --host localhost --port 27032 -d local -c oplog.rs --query '{"ts":{"$gt": {"$timestamp":{"t":1729245309, "i":1}}}}' -o ./op
增量恢复
mongorestore --host 127.0.0.1 --port 27039 --oplogReplay op/local/oplog.rs.bson
mongoexport & mongoinport
单库单表备份
mongoexport --host 127.0.0.1 --port 27030 -u user1 -p user1 --authenticationDatabase admin -d test2 -c test2 -o ./testexport01.json
导出为csv格式
## --type 指定导出数据类型
## -f 表示字段名称
mongoexport --host 127.0.0.1 --port 27030 -u user1 -p user1 --authenticationDatabase admin -d test2 -c test2 --type=csv -f _id,name -o ./testexportcsv.csv
mongodump和mongoexport的区别
格式
-
mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式
-
mongodump/mongorestore 导入/导出的是BSON格式
体积
JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
跨版本
-
在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。
-
当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。
-
跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)
索引
JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
库和集合导出的数量
-
mongoexport不支持普通导出单个db的所有的collection,一次只能导出一个collection
-
mongodump支持普通导出单个db的所有的collection
应用场景
mongoexport/mongoimport
1、异构平台迁移 mysql <---> mongodb
2、同平台,跨大版本:mongodb2.x ---> mongodb3.x
mongodump/mongorestore
日常备份恢复时使用.
MongoShake数据同步
安装及配置
下载地址:https://github.com/alibaba/MongoShake/releases
下载编译好的.tgz那个文件
配置文件:collector.conf
-
注意修改源地址和目的地址
-
监听端口是否被占用
-
配置日志地址
启动:
./collector -conf=collector.conf
停止:
通过stop.sh
停止mongoshake
,需要传入mongoshake.pid
的位置作为参数,存放在配置的log.dir
目录下。
./stop.sh /data/dba/yanhao/test/mongoshake.pid
参数:
## 同步模式,all表示全量+增量同步,full表示全量同步,incr表示增量同步
sync_mode
## checkpoint的存储地址,不设置默认会存到mongo源端的mongoshake库的ckpt_default集合中
## 如果是第一次使用incr模式,则会从checkpoint.start_position的时间点同步oplog
checkpoint.storage.url
测试
- 源副本集
主:127.0.0.1:27032
从:127.0.0.1:27030
- 目标MongoDB
127.0.0.1:27039
- 修改配置参数
## 默认的端口被占用了,修改成其他的
incr_sync.http_port = 27040
mongo_urls = mongodb://user1:[email protected]:27032,127.0.0.1:27030
tunnel.address = mongodb://127.0.0.1:27039
log.dir = /data/dba/yanhao/test
## 全量+增量
sync_mode = all
目标: |
源: |
源副本集的时间戳:
监控mongoshake状态
## curl -s ip:端口
## python -m json.tool 是输出更清晰
curl -s http://127.0.0.1:27040
curl -s http://127.0.0.1:27040/worker | python -m json.tool
## mongoshake-stat 脚本用于实时输出mongoshake的状态,包括:
logs_get/sec每秒获取的oplog数量。
logs_repl/sec每秒执行重放操作的oplog数量。
logs_success/sec每秒成功执行重放操作的oplog数量。
lsn.time最后发送oplog的时间。
lsn_ack.time目标端确认写入的时间。
lsn_ckpt.timeCheckPoint持久化的时间。
now.time当前时间。
replset源数据库的副本集名称。
./mongoshake-stat --port=9100
-
Mongoshake https://github.com/alibaba/MongoShake/wiki
-
参数配置https://github.com/alibaba/MongoShake/wiki/%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E