最近在学习分库分表,使用sharding jdbc ,所以需要在单机部署MySQL主从集群,并且选择docker作为集群容器。
第一步 拉取镜像
docker pull mysql:5.7
第二步 创建容器
docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
创建名字是master的容器,作为主库对外暴露3306端口
docker run --name slave -p 3308:3306 --link master:master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
创建名字是slave的容器,作为从库对外暴露3308端口,使用--link参数,保证与主库master之间的通信
第三步 docker主从配置
修改mysql默认my.cnf文件。
master 的my.cnf 配置修改如下:
# 唯一标志id
server-id=1
#开启二进制日志
log-bin=mysql-bin
把配置文件拷贝到master镜像中
docker cp my.cnf master:/etc/mysql/my.cnf
slave 的my.cnf 配置如下:
# 唯一标志id
server-id=2
#开启二进制日志
log-bin=mysql-bin
把配置文件拷贝到slave镜像中
docker cp my.cnf slave:/etc/mysql/my.cnf
第四步 创建用于同步的用户账号
重启master
docker restart master
使用sequel pro 连接master,并创建同步账号slave,密码为slave
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by 'slave';
show grants for 'slave'@'%';
重启slave
docker restart slave
使用sequel pro 连接slave,执行以下脚本
这里MASTER_HOST设置为master,因为我们之前建立slave镜像是使用了 --link master:master
CHANGE MASTER TO
MASTER_HOST='master',
MASTER_PORT=3306,
MASTER_USER='slave',
MASTER_PASSWORD='slave';
START SLAVE;
show slave status;
可以看到slave已经正常启动了。
第五步 验证
在master库中新建test数据库,可以看到slave库中也同样会自动创建test数据库,当我们在master的test库中新建users表,并且插入数据后,刷新slave的test库,可以看到users表,以及相同的表数据