一、环境
系统 :macOs 12.2 M1
docker版本 :20.10.17
mysql版本 :8.0.30
二、搭建mysql主从复制
-
创建两个文件夹作为主机和从机的配置文件
目录结构为:mysql/master/my.cnf
mysql/slave/my.cnf方便起见这里只指定server-id即可。 mysql/master/my.cnf [mysqld] server-id=101 mysql/slave/my.cnf [mysqld] server-id=102
-
创建容器
- 创建主机容器的命令:
docker run --name master -d -p 3307:3306 -v /Users/zhouwei/myfile/dockerfile/mysql/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD="123456" --privileged=true mysql
其中 --name是指定容器名,-p是添加端口映射,-v则是共享容器卷,因为容器里面没有vi命令,不能够修改配置文件,所以需要先在本机上修改sercer-id之后共享配置文件。privileged=true是是权限(可不加),-e 则是设置mysql的root密码。 - 创建从机容器的命令
docker run --name slave -d -p 3308:3306 -v /Users/zhouwei/myfile/dockerfile/mysql/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD="123456" --privileged=true mysql
创建完之后记得docker ps看一下这两容器是否正在运行!!!
- 创建主机容器的命令:
-
在主机中创建账户
- 首先进入主机
docker exec -it master /bin/bash
- 进入到mysql
mysql -u root -p
之后输入密码即可 - 创建用户并赋予权限
create user "zz"@"%" identified by "123456"; grant all on *.* to "zz"@"%";
- 首先进入主机
-
在从机测试账户是否能正常登录主机mysql
mysql -u zw -h 192.168.10.103 --port=3307 -p # IP换成自己主机的IP,用户名和密码则是刚刚自己创建的。3307是主机的端口
- 开启主从复制
- 首先在主机查看master的状态,得到日志文件名和开始的位置。
- 在从机上开启服务
- 首先在主机查看master的状态,得到日志文件名和开始的位置。
这里的一些参数换成自己机器上的
change master to master_host='192.168.1.106', master_port=3307, master_user='zz', master_password='123456',master_log_file='binlog.000003',master_log_pos=862;
然后执行
start slave;
最后查看从机状态
show slave status\G
出现两个yes代表成功。
master_host是主机的IP,由于是在docker里面,这里输入本机IP即可
master_port是主机的端口
user和password则是刚刚创建的用户的名字和密码
log_file是在主机查看那个binlog文件
log_pos是主机状态的那个Position参数
如果遇到上面那个是no的,可以检查下配置文件,重启容器在试一次。