How to install Mongo BI Connector in Ubuntu 18.04

As part of an innovation project, I had to develop an analytics dashboard for a data storage in MongoDb. I found an interesting component to achieve my goal and this is Mongo BI Connector.

According to documentation there is no release for Ubuntu 18.04 😢, so we are gonna try to install another version compiled for Ubuntu 16.04. First of all we need to create a folder in which we are going to store Mongo BI Connector binaries, let’s start:

root@mongo-master:~/bin# mkdir ~/bin&&cd ~/bin

Then we are going to download Mongo BI Connector binaries

root@mongo-master:~/bin# wget https://info-mongodb-com.s3.amazonaws.com/mongodb-bi/v2/mongodb-bi-linux-x86_64-ubuntu1604-v2.12.0.tgz

And then we are going to unpack this file:

root@mongo-master:~/bin# tar -xvzf mongodb-bi-linux-x86_64-ubuntu1604-v2.12.0.tgz

We need to install Mongo BI Connector in a folder that must be in $PATH environment, so we are going to check which folder is available:

root@mongo-master:~/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

As we can see, /user/local/bin is a valid path, so let’s use this location to install the connector:

root@mongo-master:~/bin# cd mongodb-bi-linux-x86_64-ubuntu1604-v2.12.0/
root@mongo-master:~/bin/mongodb-bi-linux-x86_64-ubuntu1604-v2.12.0# install -m755 bin/mongo* /usr/local/bin/

Let’s test if connector was successfully installed by running mongosqld command, the output must be:

root@mongo-master:~/bin/mongodb-bi-linux-x86_64-ubuntu1604-v2.12.0# mongosqld
2019-10-16T15:56:42.723-0600 I CONTROL [initandlisten] mongosqld starting: version=v2.12.0 pid=15246 host=mongo-master
2019-10-16T15:56:42.723-0600 I CONTROL [initandlisten] git version: 60455768a9057952689b6a02b344aeac55a72091
2019-10-16T15:56:42.723-0600 I CONTROL [initandlisten] OpenSSL version OpenSSL 1.0.2n 7 Dec 2017 (built with OpenSSL 1.0.2g 1 Mar 2016)
2019-10-16T15:56:42.723-0600 I CONTROL [initandlisten] options: {}
2019-10-16T15:56:42.723-0600 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for mongosqld.
2019-10-16T15:56:42.723-0600 I CONTROL [initandlisten]
2019-10-16T15:56:42.727-0600 I NETWORK [initandlisten] waiting for connections at 127.0.0.1:3307
2019-10-16T15:56:42.727-0600 I NETWORK [initandlisten] waiting for connections at /tmp/mysql.sock

TIP AND TRICKS 🚀🤔

If you got a message like this:

2019-10-16T15:57:12.728-0600 E NETWORK    [initandlisten] unable to load MongoDB information: failed to create admin session for loading server cluster information: unable to execute command: server selection error: server selection timeout
current topology: Type: Unknown
Servers:
Addr: localhost:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : dial tcp 127.0.0.1:27017: connect: connection refused

Don’t worry, it is because you have a binding IP that is not 127.0.0.1 and we can solve this by using a configuration file like this:

systemLog:
path: '/logs/mongosqld.log'
mongodb:
net:
uri: "mongo.example.com:27017"

Here we need to specify a path for system logs and our binding IP but, how do we know which IP is mongo using? If you follow default Mongo Db instructions there must be a file named /etc/mongod.conf and here we can get Mongo binding IP, running the following command:

root@mongo-master:~/bin/mongodb-bi-linux-x86_64-ubuntu1604-v2.12.0# cat /etc/mongod.conf#... CONFIGURATION INFO....# network interfaces
net:
port: 27017
bindIp: 192.136.9.125
#... MORE CONFIGURATION INFO....

And then we are going to create our Mongo BI Connector configuration file (be careful where you are going to create this file):

root@mongo-master:~/bin/mongodb-bi-linux-x86_64-ubuntu1604-v2.12.0# mkdir ~/conf&&cd ~/conf
root@mongo-master:~/conf# touch mongosqld.conf

And then let’s use nano or your preferred editor to add our configuration content:

#-------- ~/conf/mongosqld.conf ---------systemLog:
path: '/logs/mongosqld.log'
mongodb:
net:
uri: "192.136.9.125:27017"

🛑 WARNING: path for systemLog must exists, if not create it by executing mkdir /logs

Now let’s test our installation by passing config parameter to mongosqld :

mongosqld --config=~/conf/mongosqld.conf

To verify if everything is running successfully, let’s check our logs:

root@mongo-arbiter:~/conf# cat /logs/mongosqld.log
log output directed to /logs/mongosqld.log
2019-10-16T17:04:47.166-0600 I CONTROL [initandlisten] mongosqld starting: version=v2.12.0 pid=20261 host=mongo-arbiter
2019-10-16T17:04:47.166-0600 I CONTROL [initandlisten] git version: 60455768a9057952689b6a02b344aeac55a72091
2019-10-16T17:04:47.166-0600 I CONTROL [initandlisten] OpenSSL version OpenSSL 1.0.2n 7 Dec 2017 (built with OpenSSL 1.0.2g 1 Mar 2016)
2019-10-16T17:04:47.166-0600 I CONTROL [initandlisten] options: {config: "/root/conf/mongosqld.conf", systemLog: {path: "/logs/mongosqld.log"}, mongodb: {net: {uri: "192.136.9.125:27017", auth: {source: "admin"}}}}
2019-10-16T17:04:47.166-0600 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for mongosqld.
2019-10-16T17:04:47.166-0600 I CONTROL [initandlisten]
2019-10-16T17:04:47.168-0600 I NETWORK [initandlisten] waiting for connections at 127.0.0.1:3307
2019-10-16T17:04:47.168-0600 I NETWORK [initandlisten] waiting for connections at /tmp/mysql.sock
2019-10-16T17:04:47.172-0600 I SCHEMA [sampler] sampling MongoDB for schema...
2019-10-16T17:04:57.892-0600 I SCHEMA [sampler] mapped schema for 83 namespaces:
....

If you want to install Mongo BI Connector as a service just run the following commands (💡 if you do not have a configuration file, just ignore config parameter)

root@mongo-arbiter:~/conf# mongosqld install --config ~/conf/mongosqld.conf

And finally to start the service and running at startup let’s execute:

root@mongo-arbiter:~/conf# systemctl start mongosql.serviceroot@mongo-arbiter:~/conf# systemctl enable mongosql.service

Connecting to a replica set

You could use a configuration file like this:

systemLog:
path: '/logs/mongosqld.log'
mongodb:
net:
uri: "mongodb://192.136.9.125:27017,192.136.9.126:27017/?replicaSet=MEDIUM_COM"

🤠 Final notes

I don’t speak English natively, sorry for any mistakes. Suggestions are welcome!

Passionated developer