Skip to content

One Liner

This guide will walk you through the process of deploying Epsio.

Before you begin

Before proceeding with the deployment guide, ensure that you have the following:

  • A Linux/Macbook machine to run epsio on with:
    • Network access to your MySQL instance.
    • docker, docker compose plugin and zip installed on it
  • A MySQL Database with version 5.7+.

1. Prepare your database for Epsio

Open a connection to your database and follow the steps below. In step 3, you will supply Epsio with the password you created for the Epsio user.

Create a database for Epsio's metadata:

CREATE DATABASE epsio;

Create a database user for Epsio's exclusive use:

CREATE USER epsio_user IDENTIFIED BY '<password>';

Grant new user permissions to the Epsio database

GRANT ALL PRIVILEGES ON epsio.* TO epsio_user;

Grant replication permissions to the Epsio user

GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO epsio_user;

Grant permission to create result tables and populate existing data

GRANT SELECT, CREATE, SHOW VIEW, CREATE VIEW, ALTER, INSERT, LOCK TABLES, DELETE, DROP ON *.* TO epsio_user;

If you wish to limit access to only specific tables / databases, replace the *.* pattern with the relevant database names and table names you intend on using.

Continue to the next step to configure binlog.


2. Configure Replication

2.1 Check if replication is configured correctly

Run the following command to check if your instance is already configured correctly:

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin';

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

-- Required configuration: ROW
SHOW VARIABLES LIKE 'binlog_format';

-- Value should be 1 hour or bigger
CALL mysql.rds_show_configuration();
If all the above are configured correctly, skip to finish the deployment.

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin';

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

-- Required configuration: ROW
SHOW VARIABLES LIKE 'binlog_format';

-- Value should be 1 hour or bigger
CALL mysql.rds_show_configuration();
If all the above are configured correctly, skip to finish the deployment.

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin';

-- Required configuration: ROW
SHOW VARIABLES LIKE 'binlog_format';

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';
If all the above are configured correctly, skip to finish the deployment.

2.2 Enable replication

Create a custom RDS parameter group. If your instance already uses a custom parameter group, skip to the next stage.

Custom Parameter Group

Edit the custom parameter group.

Set binlog_format parameter to "ROW". Edit logical_replication

Set log_bin_trust_function_creators to 1. Edit logical_replication

Associate the custom parameter group with your RDS instance. Go to the RDS management console, select your instance and click on the "Modify" button.

Modify DB

In the "Modify DB Instance" page, select the custom parameter group you created in the previous step.

Update DB Parameter Group

Make sure you choose "Apply Immediately" to apply the changes immediately.

Apply Parameter Group

Wait for the parameter group configuration to change to "Pending reboot" status.

The parameter group status can be found in the "Configuration" tab of your RDS instance. Reset DB Reset DB

Then, reboot the database for the changes to take effect.

You'll know that the changes have taken affect when the status of your DB instance Parameter Group changes to "In Sync".

Parameter Group in Sync

After the instance reboots, edit the RDS retention policy:

CALL mysql.rds_set_configuration('binlog retention hours', 3);

Verify that all the new configurations are enabled by running the following commands:

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin';

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

-- Required configuration: ROW
SHOW VARIABLES LIKE 'binlog_format';

-- Value should be 1 hour or bigger
CALL mysql.rds_show_configuration();

Create a custom Aurora cluster parameter group. If your instance already uses a custom cluster parameter group, skip to the next stage.

Custom Parameter Group

Edit the custom aurora parameter group.

Set binlog_format parameter to "ROW". Edit logical_replication

Set log_bin_trust_function_creators to 1. Edit logical_replication

Associate the custom cluster parameter group with your Aurora cluster. Go to the RDS management console, select your cluster and click on the "Modify" button.

Modify DB

In the "Modify DB Cluster" page, select the custom parameter group you created in the previous step.

Update DB Parameter Group

Make sure you choose "Apply Immediately" to apply the changes immediately.

Apply Parameter Group

Wait for the parameter group configuration to change to "Pending reboot" status in your Aurora instance.

The parameter group status can be found in the "Configuration" tab of your Aurora instance. Reset DB Reset DB

Then, reboot the Aurora instance for the changes to take effect.

You'll know that the changes have taken affect when the status of your Aurora instance cluster parameter group changes to "In Sync".

Parameter Group in Sync

After the instance reboots, edit the Aurora retention policy:

CALL mysql.rds_set_configuration('binlog retention hours', 3);

Verify that all the new configurations are enabled by running the following commands:

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin';

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

-- Required configuration: ROW
SHOW VARIABLES LIKE 'binlog_format';

-- Value should be 1 hour or bigger
CALL mysql.rds_show_configuration();

Enable binlog:

Edit your mysql conf file and add the following configurations:

server-id = 223344
log_bin = mysql-bin
binlog_format = ROW
binlog_row_image = FULL
binlog_expire_logs_seconds  = 864000
For the above changes to take effect, you must restart your mysql server.

Enable log_bin_trust_function_creators: Run the following command;

SET PERSIST log_bin_trust_function_creators = 1;

Validate configuration: Verify that all the new configurations are enabled by running the following commands:

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin';

-- Required configuration: ROW
SHOW VARIABLES LIKE 'binlog_format';

-- Required configuration: ON
SHOW VARIABLES LIKE 'log_bin_trust_function_creators';

3. Install Epsio

To install Epsio, run the following commands in your VM:

export DB_HOST='YOUR_DB_HOST'
export DB_NAME='YOUR_DB_NAME'
export EPSIO_USER_PASSWORD='<The password you created in step 1>'

curl https://epsio.storage.googleapis.com/<VERSION>/install.sh | \
    VERSION=<VERSION> TOKEN=<YOUR_TOKEN> bash -s -- \
    --db-type=postgres \
    --db-host=$DB_HOST \
    --db-port=3306 \
    --db-password=$EPSIO_USER_PASSWORD \
    --db-name=$DB_NAME

3. Install Epsio

To install Epsio, run the following commands in your VM:

export DB_HOST='YOUR_DB_HOST'
export DB_NAME='YOUR_DB_NAME'
export EPSIO_USER_PASSWORD='<The password you created in step 1>'

curl https://epsio.storage.googleapis.com/<VERSION>/install.sh | \
    VERSION=<VERSION> TOKEN=<YOUR_TOKEN> bash -s -- \
    --db-type=postgres \
    --db-host=$DB_HOST \
    --db-port=3306 \
    --db-password=$EPSIO_USER_PASSWORD \
    --db-name=$DB_NAME