【Docker部署Mysql主从集群】跟着敲就得行(复制命令就得行)

本文详细介绍了如何在Mac环境下利用Docker部署一个MySQL主从复制的集群,包括配置文件设定、Docker命令创建服务、测试数据同步,并提到了读写分离软件Atlas的配置与应用,以及遇到的问题和解决办法。
摘要由CSDN通过智能技术生成

0.环境

Macbookpro 13.1
装好docker即可

1.准备配置文件

配置文件位置如下:

meihongliang@mhl ~/DockerMount/mysql_cluster $ pwd
/Users/meihongliang/DockerMount/mysql_cluster
meihongliang@mhl ~/DockerMount/mysql_cluster $ tree -L 2
.
├── master
│   └── my.cnf
├── slave1
│   └── my.cnf
└── slave2
    └── my.cnf

3 directories, 3 files
meihongliang@mhl ~/DockerMount/mysql_cluster $

三个my.cnf文件如下:
master

[mysqld]
# 开启 binlog
log-bin=mysql-bin
# 实例id master=1/slave1=2/slave2=3
server-id=1
binlog-do-db=tuling
#不同步的二进制数据库名
binlog-ignore-db=information_schema
binlog-ignore-db=mysql

slave1

[mysqld]
# 开启 binlog
log-bin=mysql-bin
# 实例id
server-id=2
binlog-do-db=tuling
#不同步的二进制数据库名
binlog-ignore-db=information_schema
binlog-ignore-db=mysql

slave2

[mysqld]
# 开启 binlog
log-bin=mysql-bin
# 实例id
server-id=3
binlog-do-db=tuling
#不同步的二进制数据库名
binlog-ignore-db=information_schema
binlog-ignore-db=mysql

2.docker下创建3个mysql服务,

docker命令如下

# mysql_master
docker run --name mysql_master -v /Users/meihongliang/DockerMount/mysql_cluster/master/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=root -p 3316:3306 -d mysql:5.7
# mysql_slave1
docker run --name mysql_slave1 -v /Users/meihongliang/DockerMount/mysql_cluster/slave1/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=root -p 3326:3306 -d mysql:5.7
# mysql_slave2
docker run --name mysql_slave2 -v /Users/meihongliang/DockerMount/mysql_cluster/slave2/:/etc/mysql/conf.d/ -e MYSQL_ROOT_PASSWORD=root -p 3336:3306 -d mysql:5.7

创建之后容器信息如下:

meihongliang@mhl ~/DockerMount/mysql_cluster/master $ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
eac34832a114        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          33060/tcp, 0.0.0.0:3336->3306/tcp   mysql_slave2
8e6558c31b7c        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          33060/tcp, 0.0.0.0:3326->3306/tcp   mysql_slave1
581daed621f6        mysql:5.7           "docker-entrypoint.s…"   2 hours ago         Up 2 hours          33060/tcp, 0.0.0.0:3316->3306/tcp   mysql_master

分别进入两个slave节点执行如下命令
在这里插入图片描述
在这里插入图片描述

#slave 节点和master节点绑定 ip='' 引号需要
change master to master_host='192.168.124.4',master_port=3316,master_user='root',master_password='root'
start slave;

# 在master节点下,查看slave节点状态
show master status;

# 在slave节点下,查看slave节点状态
show slave status;

3.测试说明

测试如下:在master数据库上,创建数据库,新增表,表新增数据等,slave1和slave2节点的数据库都会做相应的同步

注意:在slave1或者slave2节点的数据库上做相关操作,master上是不会有任何变更的!
原因:master主,同步至slave1/slave2从

4.atlas 360的一个.读写分离/从库负载均衡的一个软件应用

一个基于MySQL协议的数据中间层项目
安装说明

由这个 atlas在控制mysql的写操作入master节点库
读操作进slave1/slave2节点库

失败:原因是电脑无法安装这个软件
后续处理

若还是下载不下来,后期考虑使用:MySQL官方推出的MySQL-Proxy 0.8.2版本

5.搞定atlas了

test.cnf文件

[mysql-proxy]

#带#号的为非必需的配置项目
#管理接口的用户名
admin-username = root
#管理接口的密码
admin-password = 123456
#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 192.168.124.4:3316
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 192.168.124.4:3326@1,192.168.124.4:3336@2
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密
pwds = root:DAJnl8cVzy8=
#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon = true
#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
keepalive = true
#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 8
#日志级别,分为message、warning、critical、error、debug五个级别
log-level = message
#日志存放的路径
log-path = /usr/local/mysql-proxy/log
#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF
sql-log = REALTIME
#慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。
#sql-log-slow = 10
#实例名称,用于同一台机器上多个Atlas实例间的区分
instance = test
#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234
#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345
#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3
#默认字符集,设置该项后客户端不再需要执行SET NAMES语句
charset = utf8
#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
#client-ips = 127.0.0.1, 192.168.1
#Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
#lvs-ips = 192.168.1.1

# 准备好你的配置文件在指定的挂载路径下之后,直接上docker命令
docker run -it --name atlas -v /Users/meihongliang/DockerMount/mysql_cluster/mysql-proxy/conf:/usr/local/mysql-proxy/conf -p 1234:1234 -p 2345:2345 mybbcat/docker-360atlas /bin/bash
# 执行之后,你就在容器内了
# 进入容器
docker exec -it atlas /bin/bash
# 进入目录
cd /usr/local/mysql-proxy/bin
# 执行 ./encrypt 'root' 命令得到你数据库的连接密码 
./encrypt 'root'
# 并修改 test.cnf文件的 pwds = root:DAJnl8cVzy8=
pwds = root:DAJnl8cVzy8=

# 然后重启这个服务
./mysql-proxyd test start      #启动Atlas。
./mysql-proxyd test restart    #重启Atlas。
./mysql-proxyd test stop       #停止Atlas。
# 至此结束

连接navicat
在这里插入图片描述
查看执行日志

# 在atlas容器内
cd /usr/local/mysql-proxy/log 
# 查看你的执行日志
tail -f sql_test.log
# 结果如下
root@195c10afa3c1:/usr/local/mysql-proxy/log# tail -f sql_test.log
[02/22/2023 17:51:32] C:172.17.0.1:32792 S:192.168.124.4:3326 OK 2.139 "SHOW TABLE STATUS"
[02/22/2023 17:51:34] C:172.17.0.1:32792 S:192.168.124.4:3336 OK 4.045 "SELECT * FROM `tuling`.`user` LIMIT 0,1000"
[02/22/2023 17:51:34] C:172.17.0.1:32792 S:192.168.124.4:3326 OK 3.520 "SHOW TABLE STATUS LIKE 'user'"
[02/22/2023 17:51:35] C:172.17.0.1:32808 S:192.168.124.4:3336 OK 7.823 "SHOW COLUMNS FROM `tuling`.`user`"
[02/22/2023 17:51:35] C:172.17.0.1:32802 S:192.168.124.4:3326 OK 9.834 "SHOW CREATE TABLE `tuling`.`user`"
[02/22/2023 17:51:35] C:172.17.0.1:32808 S:192.168.124.4:3336 OK 2.091 "SHOW INDEX FROM `user`"
[02/22/2023 17:51:35] C:172.17.0.1:32792 S:192.168.124.4:3336 OK 2.530 "SHOW CREATE TABLE `user` "
[02/22/2023 17:51:35] C:172.17.0.1:32792 S:192.168.124.4:3326 OK 2.585 "SHOW FULL COLUMNS FROM `user`"
[02/22/2023 17:54:18] C:172.17.0.1:32792 S:192.168.124.4:3316 OK 19.921 "INSERT INTO `tuling`.`user` (`id`, `name`) VALUES (2, '嘻嘻笑')"
[02/22/2023 17:54:18] C:172.17.0.1:32792 S:192.168.124.4:3316 OK 3.145 "SELECT * FROM `tuling`.`user` WHERE `id` = 2"

5.结语

从此你操作这个端口为1234的代理数据库,你就能用上mysql集群,1个master 2个slave节点,共计3个节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值