Using Liquibase with MariaDB, skySQL, or MariaDB AWS RDS

To test your connection, try running Liquibase with the JDBC driver located in the same directory as Liquibase:

                liquibase
  --driver=org.mariadb.jdbc.Driver
  --classpath=./mariadb-java-client-1.4.6.jar
  --url="jdbc:mariadb://<IP OR HOSTNAME>:<PORT>/<SCHEMA NAME>"  
  --changeLogFile=db.changelog-1.0.xml
  --username=<MARIADB USERNAME>
  --password=<MARIADB PASSWORD>generateChangeLog
            

Tutorial

The purpose of this document is to guide you through the process of creating a new Liquibase project with MariaDB skySQL or MariaDB AWS RDS on a Windows machine. In this tutorial, you will generate an example project and follow the instructions to apply and learn concepts associated with creating new Liquibase projects with MariaDB.

Prerequisites

Note: Place the jdbc jar driver file in a known directory so you can locate it easily.

To create a Liquibase project with MariaDB on your Windows machine, begin with the following steps:

  • Create a new project folder and name it LiquibaseMariaDB.
  • Place the jdbc jar driver file in the LiquibaseMariaDB folder.
  • In your LiquibaseMariaDB folder, Right-click then select New>Text Document to create an empty text file.
  • Rename the text file to dbchangelog.xml. changelog files contain a sequence of changesets, each of which make small changes to the structure of your database. Instead of creating an empty changelog file in step 2, you can also use an existing database to generate a changelog. In this tutorial, you will manually add a single change. To add this change:
  • Open the dbchangelog.xml file and update the changelog file with the following code snippet:
                  <?xml version="1.0" encoding="UTF-8"?>  
  <databaseChangeLog  
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">  
  </databaseChangeLog>
            
  • In your LiquibaseMariaDB folder Right-click and select New>Text Document to create a new text file.
  • Rename the text file to liquibase.properties.
  • Edit the liquibase.properties file to add the following properties:

MariaDB AWS RDS sample liquibase.properties file

                    changeLogFile:dbchangelog.xml  
    url:  jdbc:mariadb:// myrds.cz1j1vh9uvuo.us-east-1.rds.amazonaws.com:3306/mydatabase  
    username:  myrds  
    password:  password 
    classpath:  mariadb-java-client-2.5.3.jar
            

When using AWS RDS database instance, the host name should be copied from AWS website under your RDS –> Databases –> <database name> –> Connectivity & security –> Endpoint <copy the endpoint value>. This value should look similar to the value mentioned in the liquibase.properties example above.

MariaDB skySQL sample liquibase.properties file

    changeLogFile: dbchangelog.xml
    url: mariadb://sky0001680.mdb0001652.db.skysql.net:5001/myDatabase?useSSL=true&serverSslCert=skysql_chain.pem
    username: DB00000001
    password: password
    classpath: mariadb-java-client-2.5.3.jar

When using skySQL database instance, the host name should be copied from the cloud.mariadb.com/skysql website under your skySQL account –> Your Services –> <service name> –> Click the “Show Credentials” button. Now you copy the connection information to your liquibase.properties. Those values should look similar to the values mentioned in the liquibase.properties example above. Also, under “Certificate authority chain” click on the Download link to download your skysql_chain.pem certificate and place it in your project folder.

In general, the url property should follow this template:

url: jdbc:mariadb://{host}[:{port}]/[{databasename}]

Note: If you already have a Liquibase Pro key and want to apply it to your project, add the following property to your liquibase.properties file.

                
                    liquibaseProLicenseKey
                    :  `<paste license key>`
            
  • Adding a changeset to the changelogchangesetsare uniquely identified by “author” and ”id” attributes. Liquibase attempts to execute each changeset in a transaction that is committed at the end. In the dbchangelog.xml file line 9 to 20 add a new “department” create table change set as follows:
                
                    <?xml version="1.0" encoding="UTF-8"?>  

<databaseChangeLog  
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">  

    <changeSet  id="1"  author="bob">  
        <createTable  tableName="department">  
            <column  name="id"  type="int">  
                <constraints  primaryKey="true"  nullable="false"/>  
            </column>  
            <column  name="name"  type="varchar(50)">  
                <constraints  nullable="false"/>  
            </column>  
            <column  name="active"  type="boolean"                       
              defaultValueBoolean="true"/>  
        </createTable>  
   </changeSet>  
</databaseChangeLog>
            

Note: This create table change set is XML format. The corresponding SQL statement should look like the following:

                
                    CREATE  TABLE  "department"  
("id"  number(*,0),  
 "name"  VARCHAR2(50  BYTE),  
 "active"  NUMBER(1,0)  DEFAULT  1  
);
            
  • Open the command prompt. Navigate to the LiquibaseMariaDB_RDS directory.
    Run the following command:
                  liquibase update
            
  • From a database UI Tool, check your database changes under “mydatabase”. You should see a new “department” table added to the database. For example:
                    SELECT  *  FROM  my_schema.department;
            
ID NAME ACTIVE
NULL NULL NULL

Also, you should see two more tables:

  • DATABASECHANGELOG tracking table – This table keeps a record of all the changesets that were deployed. This way, next time when you deploy again, the changesets in the changelog will be compared with the DATABASECHANGELOG tracking table and only the new changesets that were not found in the DATABASECHANGELOG will be deployed. You will notice that a new row was created in that table with the changeset information we have just deployed. For this example:
ID AUTHOR FILENAME DATEEXECUTED ORDEREXECUTED EXECTYPE MDSUM
1 bob dbchangelog.xml date&time 1 EXECUTED checksumvalue
  • DATABASECHANGELOGLOCK – This table is used internally by Liquibase to manage access to the changelog table during deployment.