(一)直接复制data目录(需要停止源和目标的mongo服务) 1.针对目标mongo服务已经存在,并正在运行的(mongo2-->mongo)。 执行步骤: (1).停止源/目标服务器的mongo服务。 mongod --dbpath /usr/local/mongodb/data/db --logpath /usr/local/mongodb/logs/mongodb.log --shutdown mongod --dbpath /usr/local/mongodb/data/db2 --logpath /usr/local/mongodb/logs/mongodb2.log --shutdown (2).删除目标mongo服务的数据目录 rm -rf /usr/local/mongodb/data/db (3).将待备份的mongo数据目录复制到目标服务绑定的数据目录 cp -r /usr/local/mongodb/data/db2 /usr/local/mongodb/data/db (4).启动目标mongo服务 mongod -f /usr/local/mongodb/mongodb.conf 2.对于目标mongo为新增,未启动的(mongo-->mongo3) (1).新增配置文件 cp mongodb2.conf mongodb3.conf。 然后修改相应的端口和数据目录 (2).将待备份的mongo数据目录复制到新mongo的数据目录 cp -r /usr/local/mongodb/data/db /usr/local/mongodb/data/db3 (3).启动mongo服务
(二)通过mongodump、mongorestore同步 参数解释 -h host,填写ip地址加上端口号 -u username, mongo的用户名 -p passwd,mongo的密码 -d database,mongo的数据库名 -c collection,mongo的数据表名 -q query,mongo的查询条件 -o output,mongodump数据存放位置 --forceTableScan 强制扫描整个表(解决版本不一致问题) mongodump到库级别,mongodump database1 database2两个库 mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 database2 -o /mongotest --forceTableScan mongodump到表级别,mongodump database1 的database1col表 mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -o /mongotest --forceTableScan mongodump到具体查询条件,mongodump database1 的database1col表中id>1000的数据 mongodump -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -q {"id":{$gte:1000}} -o /mongotest --forceTableScan mongorestore到库级别,mongorestore database1库 mongorestore -h host:port -u username -p passwd --authenticationDatabase admin -d database1 /mongotest/database1 mongorestore到表级别,mongorestore database1 的database1col表 mongorestore -h host:port -u username -p passwd --authenticationDatabase admin -d database1 -c database1col -o /mongotest/database1/database1col.bson --forceTableScan
(三) 通过db.copyDatabase实现 1.去源机器的源数据库新建一个账户(跟在admin新建的一致就行,每个数据库都需要新建一个) mongo host:port -u username -p passwd --authenticationDatabase admin use admin db.createUser({user:'testuser',pwd:'testpass',roles:['userAdminAnyDatabase']}) use database1(即将复制的库) db.createUser({user:'testuser',pwd:'testpass',roles:['readWrite']}) 2.登录目标机器 mongo host:port -u username -p passwd --authenticationDatabase admin 3.执行复制命令 //需要用到源机器的ip\端口\库名,目标机器--需要新增的库名\新建的用户名\密码 db.copyDatabase("database1","database1","host:port","testuser","testpass","SCRAM-SHA-1")
三种方案的优缺点 方案一 优点:数据快,特别是对于数据量比较大的库,速度优势更明显。不会产生中间数据。 缺点:需要停止服务 方案二 优点:速度相对于第三种更快。支持的版本更丰富(3,4都支持)。不需要停服务。 缺点:不会同步索引。会产生中间数据,需要额外的磁盘来存储。 方案三 优点:会同步索引。不会产生中间数据。不需要停服务 缺点:版本4不支持。速度较慢。
要想了解测开更多的技巧,或者想和更多大神交流,加入qq群856836575
|