22/04/2022
docker mysql 8 master / slave

https://github.com/rafipiccolo/docker-mysql-master-slave/blob/master/build.sh

docker rm -f mysql_master mysql_slave;
rm -rf /root/docker/mysql_slave /root/docker/mysql_master;
mkdir -p /root/docker/mysql_slave/data /root/docker/mysql_master/data;

cat - > /root/docker/mysql_master/myconfig.cnf <<EOF
[mysqld]
# skip-host-cache
# skip-name-resolve
server-id = 1
log_bin = mysql-bin
binlog_do_db = mydb
EOF

docker run -p 5506:3306 --name mysql_master \
-e MYSQL_ROOT_PASSWORD=xxxxxxxx \
-v /root/docker/mysql_master/data:/var/lib/mysql \
-v /root/docker/mysql_master/myconfig.cnf:/etc/mysql/conf.d/myconfig.cnf \
mysql



cat - > /root/docker/mysql_slave/myconfig.cnf <<EOF
[mysqld]
# skip-host-cache
# skip-name-resolve
server-id = 2
replicate-do-db = mydb
EOF

docker run -p 6606:3306 --name mysql_slave \
-e MYSQL_ROOT_PASSWORD=xxxxxxxx \
-v /root/docker/mysql_slave/data:/var/lib/mysql \
-v /root/docker/mysql_slave/myconfig.cnf:/etc/mysql/conf.d/myconfig.cnf \
mysql




# get status on the master 
echo "show master status;" | docker exec -i mysql_master mysql -u root -pxxxxxxxx

# on slave : start following the master : adapt this command from the show master output
echo "change master to master_host='raphaelpiccolo.com',master_port=5506,master_user='root',master_password='xxxxxxxx',master_log_file='mysql-bin.000003',master_log_pos=157;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;
echo "start slave;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;

# get status on the slave 
echo "show slave status \G;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;
echo "show variables like 'server_id';" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx;


# create data on master
echo "create database mydb;" | docker exec -i mysql_master mysql -u root -pxxxxxxxx
echo "create table t_user(id bigint primary key ,name varchar(200));" | docker exec -i mysql_master mysql -u root -pxxxxxxxx mydb
echo "insert into t_user values(1,'mindong');" | docker exec -i mysql_master mysql -u root -pxxxxxxxx mydb

# verify on slave
echo "select * from t_user;" | docker exec -i mysql_slave mysql -u root -pxxxxxxxx mydb