mac docker mysql主从_Docker mysql主从配置

一:Mysql基于Docker的主从复制搭建

1:安装docker,安装步骤可见我之前的文章:Docker-常用基建的安装与部署

docker ps 命令查询当前的容器状态,这就是我们最后要达到的效果。

2:首先拉取mysql官方镜像

bash> docker pull mysql:5.7

演示环境是在同一台服务器上部署。因为docker创建容器时默认采用bridge网络,会自行分配ip,不允许指定,重启容器会导致ip变更。

所以我们需要创建自定义的bridge网络,这样创建容器的时候才能指定ip。

bash> docker network create --subnet=172.18.0.0/16 mynetwork

3:创建三个mysql(一主两从)容器:

docker run -p 3306:3306 --name mysql_master --net mynetwork --ip 172.18.0.36 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql1/logs:/logs -v /home/data/docker/mysql/mysql1/data:/var/lib/mysql -v /home/data/docker/mysql/mysql1/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7docker run-p 3307:3306 --name mysql_slave1 --net mynetwork --ip 172.18.0.37 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql2/logs:/logs -v /home/data/docker/mysql/mysql2/data:/var/lib/mysql -v /home/data/docker/mysql/mysql2/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7docker run-p 3308:3306 --name mysql_slave2 --net mynetwork --ip 172.18.0.38 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql3/logs:/logs -v /home/data/docker/mysql/mysql3/data:/var/lib/mysql -v /home/data/docker/mysql/mysql3/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7

上面的docker run命令中的参数都有其独特的含义,比如 -p 3307:3306  表示当前环境主键的端口(3307):docker容器内的端口(3306)

-v /home/data/docker/mysql/mysql1/conf:/etc/mysql  这个配置的是mysql的配置文件路径,

对于mysql_master 需要在当前系统/home/data/docker/mysql/mysql1/conf目录下创建 my.cnf文件,内容如下:

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket= /var/run/mysqld/mysqld.sock

datadir= /var/lib/mysql

#log-error = /var/log/mysql/error.log

# Bydefaultwe only accept connections from localhost

#bind-address = 127.0.0.1# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0log-bin=/var/lib/mysql/mysql-bin

server-id=36## 主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7max_allowed_packet=20M

剩余的两个从库配置,/home/data/docker/mysql/mysql2/conf目录下创建 my.cnf文件

[mysqld]

server-id=37log-bin=/var/lib/mysql/mysql-slave1-bin

/home/data/docker/mysql/mysql3/conf目录下创建 my.cnf文件

[mysqld]

server-id=38log-bin=/var/lib/mysql/mysql-slave2-bin

配置修改完成后,重启容器:

docker restartmysql_master

docker restartmysql_slave1

docker restartmysql_slave2

二:主从配置

1:进入主库:docker exec -it mysql_master /bin/bash

bash> mysql -uroot -pmysql>SHOW MASTER STATUS;

File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 | 154|

2:同步mysql_slave1 和 mysql_slave2

# 进入mysql_salve1

bash> docker exec -it mysql_slave1 /bin/bash

# 执行同步

mysql> change master to master_host='172.18.0.36', master_user='root',master_password='Abcd12345',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154,master_connect_retry=30;

mysql> start slave;

# 进入mysql_salve2

bash> docker exec -it mysql_slave2 /bin/bash

# 执行同步

mysql> change master to master_host='172.18.0.36', master_user='root',master_password='Abcd12345',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154,master_connect_retry=30;

mysql> start slave;

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即主库中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即主库中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

最后,可以自己验证下同步的效果了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值