mongo-shake使用

下载文件

1
wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/196977/jp_ja/1608863913991/mongo-shake-v2.4.16.tar.gz" -O mongoshake.tar.gz

解压

1
tar zxvf mongoshake.tar.gz && mkdir mongoshake && mv mongo-shake-v2.4.16 mongoshake && cd mongoshake/mongo-shake-v2.4.16

配置

1
2
3
4
5
6
7
8
9
10
vi collector.conf
# 源mongodb地址
mongo_urls = mongodb://mongoshake:mongoshake@172.18.67.252:27117/admin?connect=direct
# 目录mongodb地址
tunnel.address = mongodb://user:password@127.0.0.1:27017/dbName?connect=direct
# 模式
# 同步模式,all表示全量+增量同步,full表示全量同步,incr表示增量同步。
sync_mode = full
# 指定库和集合,不要加引号,多个分号分隔
filter.namespace.white = db1.col1;db2.col2

执行

1
./collector.linux -conf=collector.conf -verbose

mongodb用户权限

源数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use admin
db.createUser({
user: "mongoshake",
roles: [
{
role: "read",
db: "local"
},
{
role: "readWrite",
db: "mongoshake"
},
{
role: "read",
db: "config"
},
{
role: "readAnyDatabase",
db: "admin"
}
]
})

目标数据库

1
2
3
4
5
6
7
8
9
10
use dbName
db.createUser({
user: "dbUser",
roles: [
{
role: "readWrite",
db: "dbName"
}
]
});

完整说明

https://help.aliyun.com/zh/mongodb/user-guide/use-mongoshake-to-implement-one-way-synchronization-between-apsaradb-for-mongodb-replica-set-instances

centos安装mongodb

以centos安装mongodb4.2为例

添加yum源

创建repo/etc/yum.repos.d/mongodb-org-4.2.repo,内容为

1
2
3
4
5
6
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7Server/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

安装mongodb

1
sudo yum install -y mongodb-org

启动mongodb

1
sudo systemctl start mongod

开机运行mongodb

1
sudo systemctl enable mongod

创建用户

1
2
3
mongo 
use admin
db.createUser({user: 'root', pwd: 'root', roles: ['readWriteAnyDatabase','root']})

修改配置开启认证

1
2
3
4
vi /etc/mongod.conf
# 添加
security:
authorization: enabled

验证登录

1
2
mongosh -u root --authenticationDatabase admin
# 输入密码

开启oplog

1
2
3
4
vi /etc/mongod.conf
# 添加
security:
authorization: enabled
1
2
3
4
5
6
mongo
use admin
# 开启
rs.initiate()
# 验证
rs:PRIMARY>