$ sudo docker run -v $PWD/config/mysql/master/1:/etc/mysql/conf.d -v $PWD/data/mysql/master/1:/var/lib/mysql -v $PWD/log/mysql/master/1:/var/log/mysql -e MYSQL_ROOT_PASSWORD=mysqlpassword -d -p 4306:3306 --name=mysql-master-1 mysql $ sudo docker run -v $PWD/config/mysql/slave/11:/etc/mysql/conf.d -v $PWD/data/mysql/slave/11:/var/lib/mysql -v $PWD/log/mysql/slave/11:/var/log/mysql -e MYSQL_ROOT_PASSWORD=mysqlpassword -d -p 4307:3306 --name=mysql-slave-11 --link mysql-master-1:master mysql $ sudo docker run -v $PWD/config/mysql/slave/12:/etc/mysql/conf.d -v $PWD/data/mysql/slave/12:/var/lib/mysql -v $PWD/log/mysql/slave/12:/var/log/mysql -e MYSQL_ROOT_PASSWORD=mysqlpassword -d -p 4308:3306 --name=mysql-slave-12 --link mysql-master-1:master mysql
1
$ sudo docker ps
1 2 3 4
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9716b7e177ad mysql:latest "docker-entrypoint.s 34 minutes ago Up 34 minutes 0.0.0.0:4308->3306/tcp mysql-slave-12 b731f3b7a8d0 mysql:latest "docker-entrypoint.s 34 minutes ago Up 34 minutes 0.0.0.0:4307->3306/tcp mysql-slave-11 6a3cbc3f50d4 mysql:latest "docker-entrypoint.s 34 minutes ago Up 34 minutes 0.0.0.0:4306->3306/tcp mysql-master-1
Entry the master database
1
$ sudo docker exec -it mysql-master-1 mysql -p
Then check the master status
1
mysql> show master status\G;
1 2 3 4 5 6 7
*************************** 1. row *************************** File: binlog.000004 Position: 743 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
Remember the binlog file name and position. Here the file is binlog.000004 and 743
Create master user
1 2 3
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'repl'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; mysql> FLUSH PRIVILEGES;
Ok slave mysql has connected to the master database. You can change something in master then check the changes on slave machine.
Set Slave Readonly
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
mysql> show global variables like "%read_only%"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | OFF | +---------------+-------+ 1 row in set (0.00 sec)
mysql> set global read_only=1; Query OK, 0 rows affected (0.06 sec)
mysql> show global variables like "%read_only%"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec)
Set Slave Read-Write
1 2
mysql> set global read_only=0; Query OK, 0 rows affected (0.00 sec)
Lock All Tables During Sync Data
To ensure that all user, include super user, can not write, look the table read only,