=====Overview=====
In this method, we simply export the database from the old release and import it in the new release.
During this, the old database can be removed but it is best practice advise to keep the old release working on the old server just in case.
The steps for this method are simple:
- Make a backup of the database or server (using mongodump)
- Install the new software (preferably the latest)
- Import the backup into the release (using mongorestore)
So let's get going:
=====Backup=====
As mentioned before, mongo has two types of backup:
* Physical
* Logical
In that method, we are using the LOGICAL one, as the physical will NOT be compatible with the new release.
[root@localhost backup]# mongodump --out /root/backup/`date +"%m-%d-%y"`
2019-09-16T06:31:47.226-0400 writing admin.system.version to
2019-09-16T06:31:47.227-0400 done dumping admin.system.version (1 document)
2019-09-16T06:31:47.227-0400 writing admin.artists to
2019-09-16T06:31:47.227-0400 done dumping admin.artists (2 documents)
[root@localhost backup]#
This command will export all not system databases and relations in the system.
=====Install new release=====
After that install the new software, either on the same server: By deleting the old one and installing the new one OR on a new server.
[root@localhost ~]# yum install mongodb-org-server.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.it4i.cz
* extras: mirror.it4i.cz
* updates: mirror.it4i.cz | 2.5 kB 00:00:00
mongodb-org-4.2 | 2.5 kB 00:00:00
Resolving Dependencies
--> Running transaction check
---> Package mongodb-org-server.x86_64 0:4.2.14-1.el7 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================================================================================================
Updating:
mongodb-org-server x86_64 4.2.14-1.el7 mongodb-org-4.2 20 M
Transaction Summary
=============================================================================================================================================================================================================================================
Upgrade 1 Package
Total download size: 20 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
mongodb-org-server-4.2.14-1.el7.x86_64.rpm | 20 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : mongodb-org-server-4.2.14-1.el7.x86_64 1/2 2/2
Verifying : mongodb-org-server-4.2.14-1.el7.x86_64 1/2 2/2
Updated:
mongodb-org-server.x86_64 0:4.2.14-1.el7
Complete!
[root@localhost ~]#
=====Instance Modifcations=====
There are couple changes to be done in order to secure our databases:
====Change the IP====
In order to change the IP, modify the /etc/mongod.conf file as so:
# network interfaces
net:
port: 27017
bindIp: 172.27.1.245 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
Restart the instance with:
[root@hostname hunter_dev]# service mongod restart
Redirecting to /bin/systemctl restart mongod.service
====Add users====
Users have to be added so we can enable security authentication:
[root@tbp-cx-mdb01 hunter_dev]# mongo 172.27.1.245
MongoDB shell version v4.0.13
connecting to: mongodb://172.27.1.245:27017/test?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("4c9e2e3d-4224-4731-89ad-3a2cca29110a") }
MongoDB server version: 4.0.13
Server has startup warnings:
2019-10-25T15:48:26.654+0200 I STORAGE [initandlisten]
2019-10-25T15:48:26.655+0200 I STORAGE [initandlisten] ** WARNING: Support for MMAPV1 storage engine has been deprecated and will be
2019-10-25T15:48:26.655+0200 I STORAGE [initandlisten] ** removed in version 4.2. Please plan to migrate to the wiredTiger
2019-10-25T15:48:26.655+0200 I STORAGE [initandlisten] ** storage engine.
2019-10-25T15:48:26.655+0200 I STORAGE [initandlisten]
2019-10-25T15:48:26.662+0200 I STORAGE [initandlisten]
2019-10-25T15:48:26.662+0200 I STORAGE [initandlisten] ** WARNING: Readahead for /var/lib/mongo is set to 4096KB
2019-10-25T15:48:26.662+0200 I STORAGE [initandlisten] ** We suggest setting it to 256KB (512 sectors) or less
2019-10-25T15:48:26.662+0200 I STORAGE [initandlisten] ** http://dochub.mongodb.org/core/readahead
2019-10-25T15:48:27.012+0200 I CONTROL [initandlisten]
2019-10-25T15:48:27.012+0200 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-10-25T15:48:27.012+0200 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-10-25T15:48:27.012+0200 I CONTROL [initandlisten]
2019-10-25T15:48:27.013+0200 I CONTROL [initandlisten]
2019-10-25T15:48:27.013+0200 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2019-10-25T15:48:27.013+0200 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-10-25T15:48:27.013+0200 I CONTROL [initandlisten]
2019-10-25T15:48:27.013+0200 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2019-10-25T15:48:27.013+0200 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2019-10-25T15:48:27.013+0200 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> use admin
switched to db admin
> db.createUser(
... {
... "user" : "adminDBA",
... pwd: "3kHq9mNqMcxIDITbbEEq",
... "roles" : [
... {
... "role" : "userAdminAnyDatabase",
... "db" : "admin"
... },
... {
... "role" : "root",
... "db" : "admin"
... },
... {
... "role" : "dbOwner",
... "db" : "admin"
... },
... {
... "role" : "userAdmin",
... "db" : "admin"
... }
... ]
... }
... )
====Enable security====
Secure authentication has to be enabled again in the /etc/mongod.conf as follows:
security:
authorization: enabled
Again restart the service:
[root@hostname hunter_dev]# service mongod restart
Redirecting to /bin/systemctl restart mongod.service
[root@hostname hunter_dev]#
=====Import the backup into the new release=====
After that, we can simply import the exported data into the new release as follows:
[root@hostname hunter_dev]# mongorestore --host 172.27.1.245 -u adminDBA -p 'password' --port 27017 /root/backup/10-25-19/
2019-10-25T16:15:55.813+0200 preparing collections to restore from
2019-10-25T16:15:55.855+0200 reading metadata for hunter_dev.livefishs.rar.chunks from /root/backup/10-25-19/hunter_dev/livefishs.rar.chunks.metadata.json
2019-10-25T16:15:55.879+0200 reading metadata for monitor.config from /root/backup/10-25-19/monitor/config.metadata.json
------------------------------------------------------------------------------
2019-10-25T16:15:58.564+0200 finished restoring hunter_dev.billFish (0 documents)
2019-10-25T16:15:58.564+0200 restoring users from /root/backup/10-25-19/admin/system.users.bson
2019-10-25T16:15:58.638+0200 done