闲扯
在大公司有时候分工很明确,会发生一个这样的事情,有些工作你本应该会,但是你却不会,因为一直有人替你做这个事情. 但是当自己不得不做的时候却发现自己还真不会搞.
我遇到了,我需要从生产环境备份mongodb下来还原到测试环境,这个工作一直由DBA来处理,但是由于防火墙 etc.原因, 不得不自己找一台跳板机来备份数据库,然后再找DBA还原到测试库.
直接还原整个过程吧,没处理过的可以一块探讨.
安装mongodb
我现在一台可以连通生产的机器上安装mongodb,centos7为例:
用centos就找centos对应的mongodb, 不然安装后会报一个mongod: cannot execute binary file的问题,附上mongodb截图和地址https://www.mongodb.com/try/download/community
1. 安装openssl
sudo yum install libcurl openssl
2. get 并 解压mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.7.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.7.tgz
export PATH=<mongodb-install-directory>/bin:$PATH
其中 <mongodb-install-directory>就是解压后的路径,一直到bin
我是在/usr/local/mongodb路径下下载的,所以解压后,
mongodb-install-directory为/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.4.7/bin
sudo mkdir -p /var/lib/mongo sudo mkdir -p /var/log/mongodb sudo chown `whoami` /var/lib/mongo # 设置权限 sudo chown `whoami` /var/log/mongodb # 设置权限mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork有可能会报fork错误,可以把fork去掉,这时候就启动了mongo
这时候理论上执行mongo就不会提示找不到命令了,若是依旧提示找不到命令,则检查export PATH=<mongodb-install-directory>/bin:$PATH这一步的路径是不是正确,我多执行了几次就好了.
这时候我去执行mongodump 发现找不到命令,哎,咋回事呢. 到bin文件里面一看,并没有mongodump.
备份数据库mongodump
1. 原来版本中已经不再同时包含这些维护工具了,需要单独下载. 下载地址:https://www.mongodb.com/try/download/database-tools
选择和你的操作系统一致的版本
2. 在/usr/local/mongodb路径下面下载并解压tool
wget https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.4.0.tgz
tar -zxvf mongodb-database-tools-rhel70-x86_64-100.4.0.tgz
这时候你在/usr/local/mongodb/mongodb-database-tools-rhel70-x86_64-100.4.0/bin 下面是可以看到mongodump 的,但是这之后执行mongodump依旧会报找不到命令. 原因就是配置的export PATH.
3. 移动bin文件到mongo的bin文件
/usr/local/mongodb/mongodb-database-tools-rhel70-x86_64-100.4.0/bin路径下面执行
mv bin /usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.4.7
4. 执行完之后mongo和tools都在mongo的路径下面了,即/usr/local/mongodb/mongodb-linux-x86_64-rhel70-4.4.7路径下面
5. 这时候可以执行mongodump的命令了.
mongodump -h 10.0.0.0 --port 27017 --authenticationDatabase admin -d test_db --username db_admin --password admin@123 --out /data/backup/test/test_db --gzip
其中10.0.0.0为源数据库地址 27017为端口, test_db为要备份的数据库名称;
db_admin为数据库账号
admin@123为数据库密码
/data/backup/test/test_db 备份路径,建议是test_db和数据库名称相同
6. 等待数据库备份完成
还原数据库mongorestore
基本和备份一样,直接执行脚本就好了
mongorestore --host 10.0.0.1 --port 27017 --username db_admin --password "admin@123" --gzip /data/backup/test/test_db