vlambda博客
学习文章列表

docker实现Mysql主从同步

docker pull mysql:5.7

也可以拉取最新的mysql镜像

docker实现Mysql主从同步

mkdir -p /usr/mysql/master

mkdir -p /usr/mysql/slave

mkdir -p /usr/mysql/slave2


docker实现Mysql主从同步

FROM mysql
COPY my.cnf /etc/mysql/  
EXPOSE 3306

CMD ["mysqld"]

docker实现Mysql主从同步

[mysqld]

log-bin=mysql-bin

server-id=1     //server-id必须三个文件都不同,唯一

docker实现Mysql主从同步

docker build -t master/mysql .

docker build -t master/slave .

docker build -t master/slave2 .

后面的点不要忘记

docker实现Mysql主从同步

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


docker实现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;

docker实现Mysql主从同步

这时,不要在对对主节点进行任何数据操作

docker实现Mysql主从同步

查询主服务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;


docker实现Mysql主从同步

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秒。


docker实现Mysql主从同步

start slave;

show slave status\G

这两个必须是 Yes 为 No 或者 connect 说明没有连接上

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

到这里已经搭建完毕,接下去就是测试了。在主节点创建一张表,会在从节点看见新增一张表。