Skip to main content
Version: 1.0.0

Database

Context​

We’re using Amazon Linux 2 AMI as our EC2 Image, which recommend MariaDB as a subsititution for MySQL. Actually, MariaDB is a AWS-adopted MySQL-compatible database.

Installation​


sudo yum update -y

sudo yum install -y mariadb-server

sudo systemctl enable mariadb

sudo systemctl start mariadb

sudo mysql_secure_installation

if met some GPG issues…

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

Connect to MariaDB from Remote Host​

Sometimes we may want to connect to the remote database for checking or debugging purpose. In order to connect from a remote host:

  1. MariaDB must be properly configured, with ip not bound to localhost and creating a privileged user.

https://mariadb.com/kb/en/configuring-mariadb-for-remote-client-access/

  1. Security group of the instance should be configured to accept inbound rule of port 3306.

Connect to MariaDB Using Python​

  1. Install pymysql
pip3 install pymysql
  1. connect to database
connection = pymysql.connect(host='ec2-35-80-21-70.us-west-2.compute.amazonaws.com',
user='sahai',
password='sahai',
database='webserver',
cursorclass=pymysql.cursors.DictCursor)

connection.ping(reconnect=True) # Otherwise the connection will be closed after some time
  1. Execute a non-param sql
cursor = connection.cursor()
sql = 'CREATE TABLE IF NOT EXISTS `dump1090` ( \
`id` int(11) NOT NULL AUTO_INCREMENT, \
`reporter` varchar(255) , \
`time` varchar(255) , \
`ICAO` varchar(255) , \
`feet` double(32,6) , \
`lat` double(32,6) , \
`lon` double(32,6) , \
`manufacturer` varchar(255) , \
`aircraft` varchar(255) , \
`n-number` varchar(255) , \
`registered` varchar(255) , \
`annotator` varchar(255) , \
PRIMARY KEY (`id`) \
) DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;'
cursor.execute(sql)
connection.commit()

  1. Execute a sql with python vars

cursor = connection.cursor()
sql = ' INSERT INTO `dump1090` (`reporter`,`time`, `ICAO`, \
`feet`,`lat`, `lon`,`manufacturer`,`aircraft`,`n-number`,`registered`,\
`annotator`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'
cursor.execute(sql, (jdata.get("reporter"), jdata.get("time"), jdata.get("ICAO"),
jdata.get("feet"), jdata.get("lat"),jdata.get("lon"),jdata.get("manufacturer"),
jdata.get("aircraft"),jdata.get("n-number"),jdata.get("registered"),jdata.get("annotator")))
connection.commit()