@(mongodb)[数据迁移]
主要使用mongodump和mongorestore命令,我把迁移工作分为以下操作:
- 先查询现有MongoDB数据库的数据量,目的是比对迁移后的数据量,查看用户数据有没有丢失。
我用了比较笨的方法进行查询,由于我确信不会有新数据插入,所以我直接查询集合文档数量:
db.库名.集合名.count()
- 创建所用目录:有MongoDB导出目录和新的数据存储目录。
在新的磁盘上创建文件夹,使用mkdir命令,目录结构要确定好,便于以后维护:
/data/mongo/data_bak (导出备份使用)
/data/mongo/data/db (新数据存储位置)
/data/mongo/data/log (新log存放位置)
- 导出现有MongoDB到目标目录
mongodump -o 目标目录(即/data/mongo/data_bak目录),-o 参数表示将现有mongod实例数据导入到指定目录。
- 停止现有mongod实例
此处一定要注意不能使用killl -9 PID,因为这样会导致数据库直接关闭,这会使数据文件损坏!关闭方式有两种:
① 使用kill -2 PID或者直接kill PID,当mongod收到SIGINT或者SIGTERM信号时,会等到当前运行的操作或者文件预分配完成,关闭所有打开的连接,将缓存的数据刷新到磁盘,最后停止。
② 使用shutdown命令,要在admin数据库下使用:
use admin
db.shutdownServer();
- 启动新mongod实例
使用以下命令启动一个新的mongod实例(使用默认端口27017)
mongod --dbpath /data/mongo/data/db --logpath /data/mongo/data/log/mongo.log --logappend –fork
--dbpath:新数据存储目录。--logpath:log存放目录。--logappend:已追加方式记录log。--fork:已后台进程运行。
- 导入数据
mongorestore --drop 备份的目录(即/data/mongo/data_bak目录), --drop参数表示如果要导入的实例中包含相同的数据文件就会删除掉,再导入。
- 查询迁移后的数据,并做比较
操作同第一步。
- 后续处理
检查查询和插入等操作是否能正常进行,后续会把原有的存储文件夹和备份文件删掉。