mac(m1) 用docker创建三个mysql做主从复制

1 篇文章 0 订阅
1 篇文章 0 订阅

mac(m1) 用docker创建三个mysql做主从复制


先安装docker(m1已适配)启动

因为docker是动态IP,每次启动mysql时IP会变,所以先设置静态ip地址

docker network create --subnet=172.172.0.0/16 docker-static

说明:

​ 172.17.0.0 是自定义的网段(根据自己电脑可随意指定)

​ docker-static 是自定义的名字(可以随便叫)

​ 可以使用docker network rm docker-static 移除网桥

: docker默认的有三种网络类型,bridge、host和none

  • bridge:网络桥接
  • 默认情况下启动、创建容器都是用该模式,所以每次docker容器重启时会按照顺序获取对应ip地址,这就 导致容器每次重启,ip都发生变化
  • none:无指定网络
  • 启动容器时,可以通过–network=none,docker容器不会分配局域网ip
  • host:主机网络
  • docker容器的网络会附属在主机上,两者是互通的。

可以通过 docker network ls 可以查看到网络类型中多了个docker-static

下载mysql镜像
docker pull mysql/mysql-server:5.7 
创建容器 _(主库,我这里叫mysql3307)
docker run -p 3307:3306 --net docker-static --ip 172.172.0.2 --name mysql3307 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.7

可以通过**docker inspect mysql3307**查看ip地址

说明:

​ -p 3307:3306: 第一个3307为本地端口号,第二个3306为容器中mysql的端口号

​ --net docker-static: 为指定ip地址(可以随意指定,必须是docker-static中的网段)

​ --name: 为mysql起的名称(可以随便叫)

​ -e MYSQL_ROOT_PASSWORD=123456: 为数据库密码123456

​ -d mysql/mysql-server:5.7: 镜像文件

因为mysql5.7使用视图工具无法连接,所以我们先赋予mysql权限

1.链接数据库

​ ①.查看id

docker ps

​ ②.进入新建的mysql3307中

docker exec -it d2d898f0d95c /bin/sh

:d2d898f0d95c 是mysql3307的id

2.赋予权限

​ ①.登录

 mysql -uroot -p123456

​ ②修改远程连接权限

     mysql>use mysql;
     mysql>update user set host = '%'  where user ='root';
     mysql>flush privileges;
     mysql>select 'host','user' from user where user='root';

​ ③输入exit 退出

使用视图工具连接数据库,发现可以连接

使用同样的方法创建第二个和第三个数据库

docker run -p 3308:3306 --net docker-static --ip 172.172.0.3 --name mysql3308 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.7
docker run -p 3309:3306 --net docker-static --ip 172.172.0.4 --name mysql3309 -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.7

—重复上面操作给数据库赋予远程连接权限

创建数据库的主从关系
  1. 新建好的有三个mysql分别是 mysql3307 | mysql3308 | mysql3309 分别占用3307,3308和3309三个端口号,ip地址分别是172.172.0.2 | 172.172.0.3 | 172.172.0.4

  2. 创建一个文件夹叫mysql–(我这里创建的目录是/opt/mysql)—根目录下创建三个文件夹与创建的三个mysql对应

  3. 这里我创建的三个文件夹是

    ​ /opt/mysql/3307

    ​ /opt/mysql/3308

    ​ /opt/mysql/3309

​ 创建文件夹的目的是存放my.cnf文件的

打开终端

1.先把cocker容器中mysql的my.cnf文件复制出来

docker cp mysql3307:/etc/my.cnf /opt/mysql/3307
docker cp mysql3308:/etc/my.cnf /opt/mysql/3308
docker cp mysql3309:/etc/my.cnf /opt/mysql/3309

2.修改配置文件,在my.cnf中加入

主库:3307

#[mysqld] 在该节点后加上
#log-bin=mysql-bin使用binary logging,mysql-bin是log文件名的前缀
#server-id=1唯一服务器ID
log-bin=mysql-bin
server-id=1

两个从库:3308,3309

#[mysqld] 在该节点后加上
#log-bin=mysql-bin使用binary logging,mysql-bin是log文件名的前缀
#server-id=1唯一服务器ID
log-bin=mysql-bin
server-id=2
read-only=1
#[mysqld] 在该节点后加上
#log-bin=mysql-bin使用binary logging,mysql-bin是log文件名的前缀
#server-id=1唯一服务器ID
log-bin=mysql-bin
server-id=3
read-only=1

3.替换配置文件

 docker cp /opt/mysql/3307/my.cnf  mysql3307:/etc/my.cnf      
 docker cp /opt/mysql/3308/my.cnf  mysql3308:/etc/my.cnf
 docker cp /opt/mysql/3309/my.cnf  mysql3309:/etc/my.cnf

4.重启

docker restart mysql3307
docker restart mysql3308
docker restart mysql3309

5.用视图工具连接三个mysql

​ 此时查看主库mysql3307的ip地址应该是172.17.0.2

docker inspect mysql3307

6.在数据库中新建查询

主库执行:

GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'backup';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'backup'@'%';

两个从库执行:

stop slave;
CHANGE MASTER TO MASTER_HOST='172.172.0.2',MASTER_PORT=3306,MASTER_USER='backup',MASTER_PASSWORD='backup';
START SLAVE;

大功告成此时主从关系已经配好了!!!

检验:执行查询

SHOW SLAVE STATUS;

​ Slave_IO_Running 字段为 Yes

​ Slave_SQL_Running 字段为 Yes

测试:在mysql3307中新建数据库,此时mysql3308和mysql3309将会同步!!!!!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值