User Tools

Site Tools


wiki:db_replication_over_stunnel

DB replication over stunnel

Install stunnel on master and slave

apt-get install stunnel

Enable stunnel autostart

sed -i '/ENABLED/s/0/1/' /etc/default/stunnel4

Create server certificate (client certs are not necessary). Just copy the server.certs, ca, and keys to slave server

master stunnel

cat /etc/stunnel/server_master.conf

cert = /etc/stunnel/certs/certs/server.crt
key = /etc/stunnel/certs/private/server.key
sslVersion = TLSv1
chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
pid = /stunnel4.pid
socket = l:TCP_NODELAY=1
;socket = r:TCP_NODELAY=1
verify = 2
CAPath = /etc/stunnel/certs/certs
CAfile = /etc/stunnel/certs/certs/rootCA.crt
[mysql]
accept = 3307
connect = 127.0.0.1:3306

slave stunnel

cat /etc/stunnel/server_slave.conf

cert = /etc/stunnel/certs/server.crt
key = /etc/stunnel/certs/server.key
sslVersion = TLSv1
chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
pid = /stunnel4.pid
;socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
verify = 2
CAPath = /etc/stunnel/certs
CAfile = /etc/stunnel/certs/rootCA.crt

[mysql]
client = yes
accept  = 127.0.0.1:3307
connect = 176.28.21.65:3307

If the server acts as a slave and master at the same time, change the PID name in configuration file

Check if connection over stunnel works

mysql -u root -p -h 127.0.0.1 -P 3307

This should connect you to the other server. Check with:

SHOW variables LIKE 'slow_query_log_file%';
+---------------------+------------------------------------------------+
| Variable_name       | Value                                          |
+---------------------+------------------------------------------------+
| slow_query_log_file | /var/lib/mysql/bet90besrv01-betserver-slow.log |
+---------------------+------------------------------------------------+

Value should be other server's hostname.

Make db dump on master

This exports 3 tables tbl* from exampledb DB. Master data 2 automatically appends the CHANGE MASTER TO statement required on the slave to start the replication process as a comment.

  mysqldump --master-data=2 -uadmin -p`cat /etc/psa/.psa.shadow` exampledb tbl_1 tbl_2 tbl_3 > 4import_dev.sql

On replication server, directive to replicate certain tables needs to be inserted each time for each table e.g. if only above 3 tables will be replicated:

    ...
 
    max_binlog_size   = 100M
    #binlog_do_db           = include_database_name
    #binlog_ignore_db       = exclude_database_name
    replicate-do-table=exampledb.tbl_1
    replicate-do-table=exampledb.tbl_2
    replicate-do-table=exampledb.tbl_3
 
 
    #
    # * InnoDB
 
    ...    

Check server_id in mysql.conf too

Create replication user on master server if it doesn't exist

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replication'@'127.0.0.1' IDENTIFIED BY 'somepassword';

Import on slave

Stop slave if it is running:

STOP SLAVE;
SHOW SLAVE STATUS;

Then import into fresh DB:

mysql -uroot -p database1 < 4import_dev.sql

On slave select master to connect to. MASTER_LOG_FILE, MASTER_LOG_POS, can be obtained from sql dump file.

CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3307, MASTER_USER='replication', MASTER_PASSWORD='somepassword', MASTER_LOG_FILE='mysql-bin.001955', MASTER_LOG_POS=12660241;

START SLAVE;
SHOW SLAVE STATUS;

Tested on

See also

References

wiki/db_replication_over_stunnel.txt · Last modified: 2021/04/15 13:18 by antisa

Except where otherwise noted, content on this wiki is licensed under the following license: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki