{{tag>mysql mariadb stunnel replication}} ====== 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 ===== See [[Creating CA and signing server and client certs with openssl]] ==== 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 ======