docker实现Mysql主从同步
docker pull mysql:5.7
也可以拉取最新的mysql镜像
mkdir -p /usr/mysql/master
mkdir -p /usr/mysql/slave
mkdir -p /usr/mysql/slave2
FROM mysql
COPY my.cnf /etc/mysql/
EXPOSE 3306
CMD ["mysqld"]
[mysqld]
log-bin=mysql-bin
server-id=1 //server-id必须三个文件都不同,唯一
docker build -t master/mysql .
docker build -t master/slave .
docker build -t master/slave2 .
后面的点不要忘记
docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=root -d master/mysql
docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=root -d slave/mysql
docker run -p 3308:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=root -d slave2/mysql
mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'192.168.99.100' IDENTIFIED BY 'mysql';(指定ip)
或者
mysql>GRANT REPLICATION SLAVE ON *.* to 'user'@'%' identified by 'mysql';(所有ip)
然后查看服务器状态show master status;
这时,不要在对对主节点进行任何数据操作
查询主服务ip
docker inspect --format='{{.NetworkSettings.IPAddress}}'
在从服务器分别执行
change master to
master_host='172.17.0.2',
master_user='root',
master_password='root',
master_port=3306,
master_log_file='mysql-bin.000004', master_log_pos=154
master_connect_retry=30;
MASTER_HOST,MASTER_USER,MASTER_PASSWORD,MASTER_PORT四个选项提供了slave从机连接到master主机的信息。
MASTER_HOST 与 MASTER_PORT:
MASTER_USER 与 MASTER_PASSWORD:
连接到master主机复制账户所对应的用户名及密码。
MASTER_LOG_FILE 与 MASTER_LOG_POS:
这两项确定slave的io线程下次开始执行时从master开始读取的位置坐标。
MASTER_CONNECT_RETRY:
重连到master时的超时等待时间,默认为60秒。
start slave;
show slave status\G
这两个必须是 Yes 为 No 或者 connect 说明没有连接上
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
到这里已经搭建完毕,接下去就是测试了。在主节点创建一张表,会在从节点看见新增一张表。