Skip to content

Instantly share code, notes, and snippets.

@xcaspar
Created July 21, 2015 08:25
Show Gist options
  • Save xcaspar/1e9ddfd206c8112c00ee to your computer and use it in GitHub Desktop.
Save xcaspar/1e9ddfd206c8112c00ee to your computer and use it in GitHub Desktop.

MongoDB数据迁移

@(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参数表示如果要导入的实例中包含相同的数据文件就会删除掉,再导入。 - 查询迁移后的数据,并做比较 操作同第一步。 - 后续处理 检查查询和插入等操作是否能正常进行,后续会把原有的存储文件夹和备份文件删掉。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment