rmoff's random ramblings
about talks

Cloning Ubiquiti’s MongoDB instance to a separate server

Published Mar 27, 2018 by in Mongodb, Ubiquiti, Ubnt, Mongorestore, Mongodump at https://rmoff.net/2018/03/27/cloning-ubiquitis-mongodb-instance-to-a-separate-server/

DISCLAIMER: I am not a MongoDB person (even if it is Web Scale X-D) - below instructions may work for you, they may not. Use with care!

For some work I’ve been doing I wanted to access the data in Ubiquiti’s Unifi controller which it stores in MongoDB. Because I didn’t want to risk my actual Unifi device by changing local settings to enable remote access, and also because the version of MongoDB on it is older than ideal, I wanted to clone the data elsewhere. This article shows you how.

Dump data from source server (unifi) ðŸ”—

To start with, SSH to the Unifi box (in my case, it’s a CloudKey). Username and password are the same as Unifi web GUI login.

Inspect local MongoDB instance (ace is the database that unifi uses):

root@UniFi-CloudKey:~# mongo localhost:27117/ace
MongoDB shell version: 2.4.10
connecting to: localhost:27117/foo
Server has startup warnings:
Wed Nov  1 19:38:11.033 [initandlisten]
Wed Nov  1 19:38:11.033 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary.
Wed Nov  1 19:38:11.033 [initandlisten] **       32 bit builds are limited to less than 2GB of data (or less with --journal).
Wed Nov  1 19:38:11.033 [initandlisten] **       Note that journaling defaults to off for 32 bit and is currently off.
Wed Nov  1 19:38:11.033 [initandlisten] **       See http://dochub.mongodb.org/core/32bit
Wed Nov  1 19:38:11.034 [initandlisten]

mongo01:PRIMARY> db.getCollection('device').find({},{name:1})
{ "_id" : ObjectId("58385328e4b001431e4e497a"), "name" : "Unifi AP - Study" }
{ "_id" : ObjectId("583854cde4b001431e4e4982"), "name" : "Unifi AP - Attic" }

Now run mongodump to dump the DB to file:

root@UniFi-CloudKey:~# mongodump --port 27117
connected to: 127.0.0.1:27117
Wed Mar  7 12:14:05.092 all dbs
Wed Mar  7 12:14:05.098 DATABASE: ace	 to 	dump/ace
Wed Mar  7 12:14:05.103 	ace.system.indexes to dump/ace/system.indexes.bson
Wed Mar  7 12:14:05.108 		 120 objects
Wed Mar  7 12:14:05.110 	ace.account to dump/ace/account.bson
Wed Mar  7 12:14:05.112 		 0 objects
Wed Mar  7 12:14:05.112 	Metadata for ace.account to dump/ace/account.metadata.json
Wed Mar  7 12:14:05.114 	ace.admin to dump/ace/admin.bson
Wed Mar  7 12:14:05.116 		 1 objects
Wed Mar  7 12:14:05.117 	Metadata for ace.admin to dump/ace/admin.metadata.json
Wed Mar  7 12:14:05.118 	ace.alarm to dump/ace/alarm.bson
Wed Mar  7 12:14:05.124 		 152 objects

Install MongoDB locally ðŸ”—

Ref: Install docs

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.6 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
sudo apt-get update
sudo apt-get install -y mongodb-org

Check version:

rmoff@proxmox01 ~> mongo --host 127.0.0.1:27017
MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017/

Restore data to new server ðŸ”—

Copy dump file from CloudKey to local server:

rmoff@proxmox01 ~> scp -r robin@unifi.moffatt.me:/root/dump unifi-mongodump

Run mongorestore to restore dump to local MongoDB instance:

rmoff@proxmox01 ~> mongorestore unifi-mongodump/

----
connected to: 127.0.0.1
Wed Mar  7 12:17:31.910 unifi-mongodump/ace/alarm.bson
Wed Mar  7 12:17:31.910         going into namespace [ace.alarm]
152 objects found
Wed Mar  7 12:17:31.912         Creating index: { name: "_id_", key: { _id: 1 }, ns: "ace.alarm" }
Wed Mar  7 12:17:31.930         Creating index: { name: "datetime_1", key: { datetime: 1 }, ns: "ace.alarm" }
Wed Mar  7 12:17:31.931         Creating index: { name: "archived_1", key: { archived: 1 }, ns: "ace.alarm" }
Wed Mar  7 12:17:31.932 unifi-mongodump/ace/radiusprofile.bson
[...]
----

Done!

Using Robo 3T (formerly Robomongo) it’s easy to explore the data in the restored instance:


Robin Moffatt

Robin Moffatt works on the DevRel team at Confluent. He likes writing about himself in the third person, eating good breakfasts, and drinking good beer.

Story logo

© 2025