基于Docker的MySQL主从集群部署

本文详细介绍了如何在Docker环境下部署MySQL主从集群,包括安装Docker、创建配置和数据目录、拉取镜像、启动容器、配置主从复制、连接测试和维护主从关系。
摘要由CSDN通过智能技术生成

基于Docker的MySQL主从集群部署

##没有docker环境先安装
##准备好docker-20.10.9.tgz、docker.service

tar -xvf docker-20.10.9.tgz
cp docker/* /usr/bin/
cp docker.service /etc/systemd/system/
chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl start docker
systemctl enable docker.service
systemctl status docker

一、准备工作

1.1、在每台机器上都创建配置和数据目录

创建配置文件目录

mkdir -p /data/mysql/conf/conf.d

创建数据存放目录

mkdir -p /data/mysql/data

赋予权限

chmod 777 -R /data/mysql

1.2、拉取镜像

docker pull mysql:8.0.35

相关命令:

  • 查看镜像:docker images

二、启动容器

先启动mysql主节点:(作为master主机)

docker run -d \
-p 4417:3306 \
--restart=always \
-v /data/mysql/conf:/etc/mysql \
-v /data/test/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql-master:8.0.35

启动从节点:(slave)

docker run -d \
-p 4417:3306 \
--restart=always \
-v /data/mysql/conf:/etc/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql-slave mysql:8.0.35

命令解释:

  • -d: 后台运行容器,并返回容器ID
  • -p 4417:3306:将容器的3306端口映射到宿主机4417端口
  • -e MYSQL_ROOT_PASSWORD=123456:配置数据库连接密码,生产环境注意修改
  • -v /data/mysql/conf:/etc/mysql:将配置文件夹挂载到宿主机
  • -v /data/mysql/data:/var/lib/mysql:将数据目录文件夹挂载到宿主机
  • –name mysql-master 将容器命名为 mysql-master

三、连接测试

搭建过程中,为了减少错误的产生,可以直接拿Navicat来进行连接测试。

注意事项: 记得打开安全组,虚拟机的话记得处理好防火墙。(另外我这里是4417,可根据实际需要更改端口)

image-20231216175945527

测试启动成功后,再来进行下一步。

四、编写主从复制配置文件

之前我们启动的时候写了这句-v /data/mysql/conf:/etc/mysql,将mysql 的配置文件夹和宿主机的文件夹挂载起来的。

那么我们就可以直接在宿主机下的/data/mysql/conf/编写配置文件了。

4.1、编写主机配置文件

我们先编写主机上的配置文件:

vi /data/mysql/conf/my.cnf

配置文件内容:

[mysqld]
# 设置server_id,需要唯一
server_id=1001
# 最大连接数
max_connections=512
# 每个用户最大连接数
max_user_connections=50

# InnoDB 存储引擎的缓冲池大小
innodb_buffer_pool_size=512

log_timestamps=SYSTEM

# 指定不需要同步的数据库名称
# binlog-ignore-db=testdb

# 同步的数据库名称(可以多个),如果不配置,表示同步所有的库
# binlog-do-db=wfjb_hlw
# binlog-do-db=wfjb_gaw

# 开启二进制日志功能
log-bin=mysql-bin

# 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=row

# 开始事件调度器
event_scheduler=ON

# 设置二进制日志使用内存大小(事务)
binlog_cache_size=5M

# 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7

4.2、编写从机配置文件

从机上的my.cnf也是同样的方式

vi /data/mysql/conf/my.cnf

配置文件内容:

[mysqld]
# 从服务器唯一ID,不可重复
server-id=1002

# 最大连接数
max_connections=512
# 每个用户最大连接数
max_user_connections=50

# InnoDB 存储引擎的缓冲池大小
innodb_buffer_pool_size=512

log_timestamps=SYSTEM

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

全都修改完毕后重启docker容器。

五、搭建主从复制

5.1、主机设置

docker exec -it mysql-master /bin/bash #进入容器
mysql -uroot -p123456 #连接mysql

5.2、主机上建立帐户并授权slave

在master容器实例内创建数据数据同步用户

# 新建一个数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
# 给这个用户授予权限
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 考虑到MySQL8 ,密码必须修改为mysql_native_password的plugin才能被连接,不然无法连接
# 该问题未验证,先不执行该语句,若真有问题再执行
# ALTER USER 'slave'@'%' IDENTIFIED WITH caching_sha2_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;

image-20231216183323765

5.3、查询master状态

show master status; # 查询master的状态

image-20231216183500815

把这里的File和Position记下来,等下在从机上要用到。

File: mysql-bin.000001
Position: 1162

Binlog_Do_DB:需要复制的数据库。

Binlog_Ignore_DB:不需要复制的数据库。

注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化

5.4、从机设置

进入slave容器

docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456

设置主服务器的信息

CHANGE MASTER TO MASTER_HOST='192.168.146.101',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=4417, 
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=157;

解释:

  • CHANGE MASTER TO MASTER_HOST=‘主机的IP地址’,

  • MASTER_USER=‘slave’(刚刚配置的用户名),

  • MASTER_PASSWORD=‘123456’(刚刚授权的密码),

  • master_port=主机开放的端口 我这里是4417端口,

  • MASTER_LOG_FILE=‘mysql-bin.具体数字’,

  • MASTER_LOG_POS=具体值(之前的Position);

image-20231216185834800

启动从服务器复制功能

start slave;

查看从服务器状态

show slave status\G

image-20231216190427205

注意事项:如果在这里出现错误,执行下面两条命令重置。

stop slave;
reset master;

六、测试主从复制

在主服务器中创建新库或插入记录,查看从服务器中是否同步成功,有则主从部署成功。

七、重置配置主从

如何停止从服务复制功能

stop slave; 

如何重新配置主从 (即清除之前的主从配置)

stop slave;
reset master;
  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值