Key features:
Note: MySQL binary log should be in the row-based format. Will not work with a MariaDB master. Tested with MySQL 5.6 and lower. Not tested with MySQL 5.7 with new replication protocol improvements.
bash
git clone https://github.com/tarantool/mysql-tarantool-replication.git mysql_tarantool-replication
cd mysql-tarantool-replication
git submodule update --init --recursive
cmake .
make
Set the binlog_format
to ROW
.
That can be done by editing the MySQL configuration file at /etc/mysql/my.cnf
:
binlog_format = ROW
Create a user for replication, for example:
CREATE USER <username>@'<host>' IDENTIFIED BY '<password>';
Grant replication privileges to the new user:
GRANT REPLICATION CLIENT ON '<db>'.'<table>' TO <username>@'<domain>';
GRANT REPLICATION SLAVE ON '<db>'.'<table>' TO <username>@'<domain>';
GRANT SELECT ON '<db>'.'<table>' TO <username>@'<domain>';
Note: you can use an asterisk (*) as a wildcard instead of specifying a database and a table.
Flush the changes:
FLUSH PRIVILEGES
Create one space for replication daemon purposes.
This space will store the current replication state.
Create more spaces to store replicated data.
Create a user for the replication daemon and enable read/write operations on target spaces.
Set up MySQL connection parameters: host
, port
, login
and password
.
Set up Tarantool connection options: host
, port
, login
and password
.
Set binlog_pos_space
to the space id created for the replication state and
binlog_pos_key
to identify the corresponding tuple in a given space.
Replicator can map MySQL tables to one or more Tarantool spaces. Each mapping item contains the names of a database and a table, a list of replicated columns, a space id (if the space id is the same as for the previous item, it is left blank) and space key fields numbers.
Multiple MySQL tables can be mapped to one Tarantool space, and the first
table in the mapping is primary. In this case, each subsequent mapping item adds
its columns to the end of the list of replicated columns for the space. When
a non-primary table deletes its row, the corresponding fields in the tuple are
reset to NULL
. When a row is inserted into a non-primary table, the
corresponding tuple is updated if it already exists or inserted if not, and all the fields
before the field mapping are set to NULL
.
Note: the configuration file contains a Spaces section, where you can set default values for tuples - for example, for indexed fields.