最近工作中,由于我司数据库采用单节点部署,线上出现了测试环节无法涉及的数据量而导致的性能问题,需要将生产环境的数据导回测试环境并恢复以供测试研发同时进行定位优化。但是当生产环境数据量特别大时,在做数据库迁移工作时,如果使用数据库自带的导出导入工具,非常耗时。最简单粗暴方式为将数据库的整个数据目录拷贝,而后在其他机器上进行数据恢复。以下记录记录前一阶段是如何进行海量数据的导入导出。
一、 mysql数据库的迁移恢复
mysql的迁移恢复比较简单,在待恢复的服务器上,安装与生产环境版本一样的mysql数据库服务。而后停止数据库服务,将拷贝出来的生产环境mysql数据目录放到待恢复服务器的某个目录A,修改待恢复服务器上mysql配置文件/etc/my.cnf,将配置项datadir指向目录A。为最大程度保持生产环境与恢复环境的一致,最好将生产mysql配置文件一同导回,在待恢复环境的/etc/my.cnf中完成配置。
启动mysql数据库服务即可完成数据的恢复。
二、mongodb数据库的迁移恢复
?mongodb的迁移同样是在待恢复服务器上安装与生产环境版本一致的mongodb服务,但是这里并不能简单粗暴的修改配置文件中的数据目录路径指向。由于mongodb自身的限制,每个环境上在mongodb的数据目录中都会生成对应的记录信息;亦或者由于没有正确的停止mongodb服务,导致产生了mongo.lock锁文件等等一些原因,直接指向数据目录将无法启动mongodb数据库服务。因此将mongodb数据目录导回后,放置到待恢复服务器某个目录B,修改了/etc/mongod.conf中的dbPath后,需要先针对于待恢复环境进行数据的修复,修复命令如下:
# 当数据目录很大时,修复时间将会对应很长,需要耐心等待。命令正常执行完成会有如下输出。
[root@localhost mongo-3.4]# /usr/bin/mongod -f /etc/mongod.conf -dbpath /data/mongodb/data/ --repair
about to fork child process, waiting until server is ready for connections.
forked process: 1058
child process started successfully, parent exiting
?当数据修复完成后,执行如下命令启动mongodb数据库:
/usr/bin/mongod -f /etc/mongod.conf -dbpath /data/mongodb/data/
启动mongodb数据库服务后,输入mongodb命令进行mongodb命令行,此时可以输入一些查询的命令进行验证。
注意:mongodb的服务停止不要直接使用kill -9命令,这样会强制停止mongodb服务,造成服务没有正常关闭结束,导致数据库锁文件生成,下次再启动会报错。正确的停止mongo服务器的方法是:
[root@localhost mongo-3.4]# mongo # 进入命令行
MongoDB shell version v3.4.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.0
......
> use admin # 切换admin库
switched to db admin
> db.shutdownServer() # 关闭数据库服务
server should be down...
......
reconnect 127.0.0.1:27017 (127.0.0.1) failed failed
> exit # 退出命令行
bye
|