参考官方文档 : MongoDB Backup Methods
原本使用操作系统的快照进行备份还原,备份成功后,还原没有成功(参考:Backup and Restore with Filesystem Snapshots)
所以这个方法就先不记录到这里了。
当前测试以下?种备份还原方法(个人初学理解):
1. 使用拷贝和替换数据库文件进行备份还原
2. 使用mongodump和mongorestore
3. 使用mongoimport 和 mongoexport
1. 使用拷贝和替换数据库文件进行备份还原(有些危险又不好)
1.1 备份
a. 在mongodb中执行db.fsyncLock(),刷新数据写入磁盘并锁住整个实例:
[plain]
view plain
copy
1. >db.fsyncLock()
b. 打包压缩整个数据库目录(也可以打包部分数据库),作为备份:
[plain]
view plain
copy
1. [root@localhost ~]# tar -cvzf /root/mongodb_20150505.tar.gz /var/lib/mongo
c. 在mongodb中执行
db.fsyncUnlock(
)解锁,备份步骤完成!~
[plain]
view plain
copy
1. >db.fsyncUnlock()
1.1 还原
a. 在mongodb中关闭服务(或者在操作系统层面关闭mongod服务):
[plain]
view plain
copy
1. >use admin
2. >db.shutdownServer()
b. 将mongo数据文件删除!注意确认备份存在且正常!~否则回天无力!
[plain]
view plain
copy
1. [root@localhost ~]# rm -rf /var/lib/mongo/*
c. 解压备份的文件到根目录下,相当于还原:
[plain]
view plain
copy
1. [root@localhost ~]# tar -xvzf /root/mongodb_20150505.tar.gz -C /
d. 如果启动不了服务,先删除文件mongod.lock:
[plain]
view plain
copy
1. [root@localhost ~]# rm -f /var/lib/mongo/mongod.lock
e. 启动服务,正常访问。
[plain]
view plain
copy
1. [root@localhost ~]# service mongod start
2. 使用
mongodump和
mongorestore
a. 简单备份还原本地数据库的的方法,备份所有及还原所有:
[plain]
view plain
copy
1. mongodump
2. mongorestore /root/dump
备份完成后在当前目录将生成一个文件夹”dump“:
b. 还原单个数据库时,指定要还原的数据库及其备份目录:
[plain] view plain copy
1. mongorestore --db test /root/dump/test
还可以指定输出路径,使用计算机名:
[plain] view plain copy
1. mongodump --host localhost.localdomain --port 27017 --out /root/mongodump-2015-05-05
2. mongorestore --port 27017 --db test /root/mongodump-2015-05-05/test
远程备份时指定用户名密码(这个没尝试,参考官方例子):
[plain] view plain copy
1. mongodump --host mongodb1.example.net --port 3017 --username user --password pass --out /opt/backup/mongodump-2013-10-24
2. mongorestore --host mongodb1.example.net --port 3017 --username user --password pass /opt/backup/mongodump-2013-10-24
c. 更多参考:执行 # mongorestore --help
[plain] view plain copy
1. # mongorestore --help
2.
3.
4. general options:
5. --help print usage
6. --version print the tool version and exit
7.
8. verbosity options:
9. -v, --verbose more detailed log output (include multiple times for more verbosity, e.g. -vvvvv)
10. --quiet hide all log output
11.
12. connection options:
13. -h, --host= mongodb host to connect to (setname/host1,host2 for replica sets)
14. --port= server port (can also use --host hostname:port)
15.
16. ssl options:
17. --ssl connect to a mongod or mongos that has ssl enabled
18. --sslCAFile= the .pem file containing the root certificate chain from
19. the certificate authority
20. --sslPEMKeyFile= the .pem file containing the certificate and key
21. --sslPEMKeyPassword= the password to decrypt the sslPEMKeyFile, if necessary
22. --sslCRLFile= the .pem file containing the certificate revocation list
23. --sslAllowInvalidCertificates bypass the validation for server certificates
24. --sslAllowInvalidHostnames bypass the validation for server name
25. --sslFIPSMode use FIPS mode of the installed openssl library
26.
27. authentication options:
28. -u, --username= username for authentication
29. -p, --password= password for authentication
30. --authenticatinotallow= database that holds the user's credentials
31. --authenticatinotallow= authentication mechanism to use
32.
33. namespace options:
34. -d, --db= database to use
35. -c, --collectinotallow= collection to use
36.
37. input options:
38. --objcheck validate all objects before inserting
39. --oplogReplay replay oplog for point-in-time restore
40. --oplogLimit= only include oplog entries before the provided Timestamp(seconds[:ordinal])
41. --restoreDbUsersAndRoles restore user and role definitions for the given database
42. --dir= input directory, use '-' for stdin
43.
44. restore options:
45. --drop drop each collection before import
46. --writeCnotallow= write concern options e.g. --writeConcern majority,
47. --writeConcern '{w: 3, wtimeout: 500, fsync: true, j:true}' (defaults to 'majority')
48. --noIndexRestore don't restore indexes
49. --noOptionsRestore don't restore collection options
50. --keepIndexVersion don't update index version
51. --maintainInsertionOrder preserve order of documents during restoration
52. -j, --numParallelCollectinotallow= number of collections to restore in parallel (4 by default)
53. --numInsertinotallow= number of insert operations to run concurrently per collection (1 by default)
54. --stopOnError stop restoring if an error is encountered on insert (off bydefault)
3. 使用mongoimport 和 mongoexport
3.1 mongoexport导出
[plain] view plain copy
1. --type: 为json 或 csv
2. --fields: 选择导出的列
3.
4.
5. #导出列{_id,id,size}为csv的格式
6. mongoexport --db test --collection tab --type=csv --fields _id,id,size --out /root/test_tab.csv
7.
8. #导出json格式
9. mongoexport --db test --collection tab --type=json --out /root/test_tab.json
10.
11. #输出到shell中,查询id=2 并按name升序输出
12. mongoexport --db test --collection tab --query '{"id": 2}' --sort '{"name": 1}'
13.
14. #查询导出
15. mongoexport --db test --collection tab --type=csv --query '{"id": 2}' --fields _id,id --out /root/test_tab.csv
16.
17. #简写选项[--db]和[--collection],使用跳过和限制函数输出
18. mongoexport -d test -c tab --sort '{"name": -1}' --limit 2 --skip 2 --out /root/test_tab.json
19.
20.
21. #若是远程,需要添加参数:host,port,username,password
22. --host servername_or_ip --port 37017 --username user --password pass
查看帮助:mongoexport --help
[plain] view plain copy
1. general options:
2. --help print usage
3. --version print the tool version and exit
4.
5. verbosity options:
6. -v, --verbose more detailed log output (include multiple times for more verbosity, e.g. -vvvvv)
7. --quiet hide all log output
8.
9. connection options:
10. -h, --host= mongodb host to connect to (setname/host1,host2 for replica sets)
11. --port= server port (can also use --host hostname:port)
12.
13. ssl options:
14. --ssl connect to a mongod or mongos that has ssl enabled
15. --sslCAFile= the .pem file containing the root certificate chain from the certificate authority
16. --sslPEMKeyFile= the .pem file containing the certificate and key
17. --sslPEMKeyPassword= the password to decrypt the sslPEMKeyFile, if necessary
18. --sslCRLFile= the .pem file containing the certificate revocation list
19. --sslAllowInvalidCertificates bypass the validation for server certificates
20. --sslAllowInvalidHostnames bypass the validation for server name
21. --sslFIPSMode use FIPS mode of the installed openssl library
22.
23. authentication options:
24. -u, --username= username for authentication
25. -p, --password= password for authentication
26. --authenticatinotallow= database that holds the user's credentials
27. --authenticatinotallow= authentication mechanism to use
28.
29. namespace options:
30. -d, --db= database to use
31. -c, --collectinotallow= collection to use
32.
33. output options:
34. -f, --fields= comma separated list of field names (required for exporting CSV) e.g. -f "name,age"
35. --fieldFile= file with field names - 1 per line
36. --type= the output format, either json or csv (defaults to 'json')
37. -o, --out= output file; if not specified, stdout is used
38. --jsonArray output to a JSON array rather than one object per line
39. --pretty output JSON formatted to be human-readable
40.
41. querying options:
42. -q, --query= query filter, as a JSON string, e.g., '{x:{$gt:1}}'
43. -k, --slaveOk allow secondary reads if available (default true)
44. --forceTableScan force a table scan (do not use $snapshot)
45. --skip= number of documents to skip
46. --limit= limit the number of documents to export
47. --sort= sort order, as a JSON string, e.g. '{x:1}'
3.2 mongoimport 导入
[plain] view plain copy
1. #列"_id"也会导入,注意重复键
2. mongoimport --db mydb --collection tab --file /root/test_tab.json
3.
4. mongoimport --db mydb --collection tab --type csv --headerline --file /root/test_tab.csv
5.
6.
7. #若是远程,需要添加参数:host,port,username,password
8. --host servername_or_ip --port 37017 --username user --password pass
查看帮助: mongoimport --help
[plain] view plain copy
1. general options:
2. --help print usage
3. --version print the tool version and exit
4.
5. verbosity options:
6. -v, --verbose more detailed log output (include multiple times for more verbosity, e.g. -vvvvv)
7. --quiet hide all log output
8.
9. connection options:
10. -h, --host= mongodb host to connect to (setname/host1,host2 for replica sets)
11. --port= server port (can also use --host hostname:port)
12.
13. ssl options:
14. --ssl connect to a mongod or mongos that has ssl enabled
15. --sslCAFile= the .pem file containing the root certificate chain from the certificate authority
16. --sslPEMKeyFile= the .pem file containing the certificate and key
17. --sslPEMKeyPassword= the password to decrypt the sslPEMKeyFile, if necessary
18. --sslCRLFile= the .pem file containing the certificate revocation list
19. --sslAllowInvalidCertificates bypass the validation for server certificates
20. --sslAllowInvalidHostnames bypass the validation for server name
21. --sslFIPSMode use FIPS mode of the installed openssl library
22.
23. authentication options:
24. -u, --username= username for authentication
25. -p, --password= password for authentication
26. --authenticatinotallow= database that holds the user's credentials
27. --authenticatinotallow= authentication mechanism to use
28.
29. namespace options:
30. -d, --db= database to use
31. -c, --collectinotallow= collection to use
32.
33. input options:
34. -f, --fields= comma separated list of field names, e.g. -f name,age
35. --fieldFile= file with field names - 1 per line
36. --file= file to import from; if not specified, stdin is used
37. --headerline use first line in input source as the field list (CSV and TSV
38. only)
39. --jsonArray treat input source as a JSON array
40. --type= input format to import: json, csv, or tsv (defaults to 'json')
41.
42. ingest options:
43. --drop drop collection before inserting documents
44. --ignoreBlanks ignore fields with empty values in CSV and TSV
45. --maintainInsertionOrder insert documents in the order of their appearance in the input source
46. -j, --numInsertinotallow= number of insert operations to run concurrently (defaults to 1)
47. --stopOnError stop importing at first insert/upsert error
48. --upsert insert or update objects that already exist
49. --upsertFields= comma-separated fields for the query part of the upsert
50. --writeCnotallow= write concern options e.g. --writeConcern majority,
51. --writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}'
52. (defaults to 'majority')
由于没有做复制,复制中的备份到时再测试记录吧!~