Using Liquibase with Percona XtraDB Cluster

Percona XtraDB Cluster is a database clustering solution for MySQL. It integrates Percona Server for MySQL and Percona XtraBackup with the Galera library to enable synchronous multi-source replication. For more information, see Percona XtraDB Cluster documentation.

Supported versions

  • 8.0.X
  • 5.7

Verification level

Foundational: All applicable Liquibase Open Source functionality and partial Liquibase Pro functionality works with this database. Verified by automated and real-world testing from Liquibase. The Liquibase support team provides best-effort usage and bug-fix support to Commercial users.

Note: A database's verification level indicates how well it works with different features in Liquibase and across different products, such as Liquibase Open Source and Liquibase Pro. For more information, see Liquibase Database Tutorials.

Prerequisites

Install drivers

To use Liquibase and Percona XtraDB Cluster, you need to have the JDBC driver JAR file (Maven download).

Place your JAR file(s) in the liquibase/lib directory. Read more: Adding and Updating Liquibase Drivers.

If you use Maven, you must include the driver JAR as a dependency in your pom.xml file. Read more: Configuring Liquibase Attributes in your Maven POM File.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.30</version>
</dependency>

Test your connection

  1. Ensure your Percona XtraDB Cluster database is configured:
    1. Check the database status by running the wsrep_cluster_status command or verifying replication:
    2. Run the following SQL script to create Liquibase metatables:
    3. --  Create Database Lock Table
      DROP TABLE IF EXISTS `DATABASECHANGELOGLOCK`;
      CREATE TABLE `DATABASECHANGELOGLOCK` (
      					ID INT NOT NULL,
      					`LOCKED` BIT(1) NOT NULL,
      					LOCKGRANTED datetime NULL,
      					LOCKEDBY VARCHAR(255) NULL,
      					PRIMARY KEY (ID)
      ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 
      COLLATE=utf8_unicode_ci;
      
      --  Create Database Change Log Table
      DROP TABLE IF EXISTS `DATABASECHANGELOG`;
      CREATE TABLE `DATABASECHANGELOG` (
      					`ID` varchar(255) NOT NULL,
      					`AUTHOR` varchar(255) NOT NULL,
      					`FILENAME` varchar(255) NOT NULL,
      					`DATEEXECUTED` datetime NOT NULL,
      					`ORDEREXECUTED` int NOT NULL,
      					`EXECTYPE` varchar(10) NOT NULL,
      					`MD5SUM` varchar(35) DEFAULT NULL,
      					`DESCRIPTION` varchar(255) DEFAULT NULL,
      					`COMMENTS` varchar(255) DEFAULT NULL,
      					`TAG` varchar(255) DEFAULT NULL,
      					`LIQUIBASE` varchar(20) DEFAULT NULL,
      					`CONTEXTS` varchar(255) DEFAULT NULL,
      					`LABELS` varchar(255) DEFAULT NULL,
      					`DEPLOYMENT_ID` varchar(10) DEFAULT NULL,
      					PRIMARY KEY (ID)
      ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 
      COLLATE=utf8_unicode_ci;
  2. Specify the database URL in the Liquibase properties file. Liquibase does not parse the URL. You can either specify the full database connection string or specify the URL using your database's standard JDBC format:
  3. url: jdbc:mysql://<servername>:<port>/<dbname>

    Tip: To apply a Liquibase Pro key to your project, add the following property to the Liquibase properties file: liquibaseProLicenseKey: <paste code here>

  1. Create a text file called changelog (.xml, .sql, .json, or .yaml) in your project directory and add a changeset.
  2. Navigate to your project folder in the CLI and run the Liquibase status command to see whether the connection is successful:
  3. liquibase --username=test --password=test --changelog-file=<changelog.xml> status

    Note: You can pass arguments in the CLI or keep them in the Liquibase properties file.

  4. Inspect the SQL with the update-sql command. Then make changes to your database with the update command.
  5. liquibase --changelog-file=<changelog.xml> update-sql
    liquibase --changelog-file=<changelog.xml> update
  6. From a database UI tool, ensure that your database contains the test_table you added along with the DATABASECHANGELOG table and DATABASECHANGELOGLOCK table.

Related links