腾讯云数据库MongoDB数据迁移最佳实践

本篇介绍采用 MongoDB 自带的工具mongodump/mongorestore将本地自建MongoDB/腾讯云腾讯云服务器自建MongoDB/竞品MongoDB数据迁移至腾讯智能腾讯云数据库MongoDB 的最佳实践,采用的是离线迁移的方式。

注意事项

  • 该实践操作为全量迁移,需在迁移数据前停止数据库写入操作;
  • 工具所在的Linux机器需要安装MongoDB服务,最好是4.0版本;
  • 目前腾讯云的数据库操作需要在腾讯云服务器上进行,所需要提前创建腾讯云服务器。

先期准备

  1. 在腾讯云服务中创建腾讯云数据库MongoDB 实例,用于数据库迁移的目标位置,创建过程参考开通服务。

    说明:创建实例后注意观察实例的连接信息。

  2. 在腾讯云的服务中创建一个腾讯云服务器,并在腾讯云服务器上安装4.0版本的MongoDB,创建腾讯云服务器的过程参考文档。

开始迁移

本地自建/腾讯云腾讯云服务器自建MongoDB数据库迁移至腾讯云

将自建的MongoDB数据库迁移至腾讯智能腾讯云数据库MongoDB 的流程分为三步,如下图:

具体的实践步骤如下:

  1. 先在腾讯云上创建腾讯云服务器和腾讯云数据库MongoDB 实例。

    说明:

    • 查看腾讯云服务器的公网IP
    • 查看腾讯云数据库MongoDB 实例的连接信息
  2. 连接自建的MongoDB,dump出数据库信息。

    $ cd /XXX/dump_dir$ mongodump

    说明:如在服务器上自建MongoDB,登录服务器后需要执行mongodump命令即可将所有数据库dump到当前路径下,故需要提前选定执行路径

  3. 将数据传到腾讯云腾讯云服务器中

    #这里采用的直接复制的方式,建议打包复制$ scp -r /XXX/dump_dir/user@IP:/dst_dir

  4. 通过公网IP登录腾讯云腾讯云服务器,并在腾讯云服务器上安装MongoDB 4.0版本
  5. 在腾讯云服务器上执行mongorestore工具,将数据恢复到腾讯智能腾讯云数据库MongoDB 实例中

    mongorestore --host pW36Z31.mongodb.bj.baidubce.com:27017 -u root -p ****** --authenticationDatabase admin /dump_dir/

需要将腾讯云腾讯云服务器上自建的MongoDB数据迁移到腾讯智能腾讯云数据库MongoDB 实例中时,仅需要登录腾讯云服务器机器后将数据库dump到腾讯云服务器本地,然后在腾讯云服务器上执行mongorestore工具将数据恢复到腾讯云数据库MongoDB 实例中即可。

将阿里云的MongoDB数据迁移至腾讯云

  1. 进入aliyun门户,查看MongoDB服务的控制页面;
  2. 点击MongoDB实例基本信息,查看用户的登录信息;

  3. 登录腾讯云上所创建的腾讯云服务器服务器,然后从BBC上连接阿里云的mongoDB实例,可以查看数据库和集合信息;

    #登陆腾讯云服务器机器 ssh root@106.12.157.191 #连接阿里云MongoDB实例 mongo --host dds-bp1e886510731ab41.mongodb.rds.aliyuncs.com:3717 -u root -p ******** --authenticationDatabase admin

  4. 在腾讯云服务器上执行Mongodump命令,将MongoDB数据dump到腾讯云服务器机器上;

    mongodump --host dds-bp1e886510731ab41.mongodb.rds.aliyuncs.com:3717 -u root -p ******** --authenticationDatabase admin -o /dump_dir/

  5. 在腾讯云服务器上执行Mongorestore命令,将数据库恢复到腾讯云的腾讯云数据库MongoDB 实例中;

    mongorestore --host pW36Z31.mongodb.bj.baidubce.com:27017 -u root -p ****** --authenticationDatabase admin /dump_dir/

  6. 数据迁移完毕,连接腾讯云数据库MongoDB 实例,查看所恢复的数据库信息。

    mongo --host pW36Z31.mongodb.bj.baidubce.com:27017 -u root -p ****** --authenticationDatabase admin

数据验证

由于是离线数据导入,所以导入数据的原数据库和目标数据的数据应该相同,可以比较导入源和目标的数据库的信息及个数、数据库中集合和文档的数据、个数是否一致,目标数据库是否可以正常操作等。

服务入口切换

在MongoDB数据库导入/导出完成之后,需要将应用程序终端节点更改为写入到腾讯云的腾讯云数据库MongoDB 服务节点。

常见问题

使用工具mongodump/mongorestore迁移数据会影响业务吗?

使用mongodump/mongorestore迁移数据是离线迁移过程,需要停止读写业务,建议在业务低峰操作。

怎么确认dump/restore操作完成?

mongodump/mongorestore操作完成会有提示结果,结果中显示dump/restore出的那些database中collection的document个数。执行结果失败也会有提示,并且提示出哪些数据库操作失败。

执行mongodump完成的提示结果2019-04-09T09:52:00.161+0800writing admin.system.version to2019-04-09T09:52:00.162+0800done dumping admin.system.version (1 document)2019-04-09T09:52:00.162+0800writing student_db.student_col to2019-04-09T09:52:00.162+0800writing mydb.mycollection to2019-04-09T09:52:00.163+0800done dumping student_db.student_col (5 documents)2019-04-09T09:52:00.163+0800done dumping mydb.mycollection (3 documents)执行mongorestore完成的提示结果2019-04-09T10:06:05.724+0800preparing collections to restore from2019-04-09T10:06:05.725+0800reading metadata for student_db.student_col from dump/student_db/student_col.metadata.json2019-04-09T10:06:05.758+0800reading metadata for mydb.mycollection from dump/mydb/mycollection.metadata.json2019-04-09T10:06:05.758+0800restoring mydb.mycollection from dump/mydb/mycollection.bson2019-04-09T10:06:05.778+0800no indexes to restore2019-04-09T10:06:05.778+0800finished restoring mydb.mycollection (3 documents)
非4.0版本是不是有什么兼容性问题,是否不支持数据导入?

由于目前腾讯云上所创建的MongoDB实例都是3.4版本,是基于WiredTiger存储引擎的系统,所以在腾讯云服务器中安装3.4版本的软件即可。但是自建/竞品的MongoDB数据库版本可能是4.0以上版本,所以为了能兼容、并正常的导数据,建议在腾讯云服务器机器上安装4.0版本的MongoDB软件。

为什么需要从bcc上远程登录 MongoDB 实例来dump?

因为腾讯云的腾讯云数据库MongoDB 实例目前仅支持在腾讯云腾讯云服务器上操作,所以在导数据时如果是公有云便可以直接将公有云数据dump到腾讯云腾讯云服务器上,如果是自建/私有云需要在自建环境下dump出数据,然后上传到腾讯云腾讯云服务器机器,最后恢复到腾讯云数据库MongoDB 实例中。

连接断掉如何解决?是否需要重新dump?

如果在dump/restore数据时连接端掉,需要重新连接然后操作。但是如果数据量较大,终端显示已经dump/restore出了哪些数据,这些数据不必重新操作,仅对于没有操作完成的数据库重新进行操作。

本地MongoDB数据库存在集合system.indexes在restore到腾讯智能腾讯云数据库MongoDB 后不存在了?

因为存储引擎不同导致的,腾讯云数据库MongoDB 使用的存储引擎是WiredTiger3.4版本,而在本地MongoDB使用的mmapv1存储引擎,数据迁移完毕后这类集合就不存在了,但不影响迁移之后的正常使用。

在mongodump/mongorestore出现如下错误
2019-04-09T14:36:35.338+0800Failed: error counting admin.system.keys: not authorized on admin to execute command { count: "system.keys", query: {}, $readPreference: { mode: "secondaryPreferred" }, $db: "admin" }

这是由于MongoDB shell和MongoDB server版本不兼容导致的,在3.X版本的MongoDB shell来操作4.0以上版本MongoDB数据库时会出现此错误,建议升级腾讯云腾讯云服务器上的软件版本至4.0以上。

标签