docker建立mysql8的主备,详细过程及踩坑

序言

最近老被问起mysql主备怎么搭建,所以手把手做一个教程,介于机器有限,所以永docker实现。

环境

  1. 操作系统Windows11
  2. docker 4.4.4
  3. MySQL8.0.19

主从搭建

mysql安装

拉取镜像

拉取

docker pull mysql:8.0.19

查看

docker images

如果有docker 桌面版管理器则直接查看
在这里插入图片描述

利用镜像运行两个mysql

master:对外端口3306,容器名称mysql-master,root密码:12345678

docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19

slave:对外端口3307,容器名称mysql-slave,root密码:12345678

docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=12345678 -d mysql:8.0.19

检查是否运行正常

通过命令查看容器进程
docker ps -a
或者通过docker桌面管理器查看

在这里插入图片描述

通过客户端连接测试

在这里插入图片描述
在这里插入图片描述

建立一个库待同步使用

利用图形客户端建立一个测试库,待同步的时候使用
主库建立:
在这里插入图片描述
从库建立:
在这里插入图片描述

主从配置

配置主库

通过docker ps -a 查看容器id
在这里插入图片描述
通过docker exec进入容器内部

docker exec -it 4c /bin/bash

4c为master容器id:4ca9405ee48f的缩写
切换到/etc/mysql目录下,修改my.cnf
在这里插入图片描述
修改my.cnf
安装vim

apt-get update
apt-get install vim

编辑my.cnf
在这里插入图片描述

server-id=100 // 同一个局域网要唯一
log-bin=master-bin //开启二进制日志功能,名字可以自定义
binlog-format=ROW //二进制日志格式,row、statement,mixed
binlog-do-db=wh-test //同步的数据库名称,不配置则同步所有的

配置好重启

docker restart mysql-master

配置从库

通过docker exec 进入容器

docker exec -it a9 /bin/bash

a9为slave容器id:a93069941737的缩写,id获取方式docker ps -a
同主库一样进入后找到my.cnf文件
在这里插入图片描述
编辑my.cnf
在这里插入图片描述

server-id=101 #局域网唯一,和master不一样就可以
log-bin=mysql-slave-bin #开启二进制日志功能,
relay_log=mysql-relay-bin 
read_only=1 #设置只读,不设置则读写皆可以

配置完成后重启容器

docker restart mysql-slave

开启主从复制

获取file和position

进入master库的mysql客户端,查看master状态
进入master库

docker exec -it 4c /bin/bash

mysql -uroot -p12345678

show master status

在这里插入图片描述
记录下来file:master-bin.000001,position:38492

获取master的独立ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master

在这里插入图片描述
获取ip地址:172.17.0.2

进入slave库的mysql客户端
docker exec -it 4c /bin/bash

mysql -uroot -p12345678

change master to master_host='172.17.0.2', master_user='root', master_password='12345678', master_port=3306, master_log_file='master-bin.000001', master_log_pos=38492, master_connect_retry=30;

master_host :Master库的地址,通过 docker inspect --format=‘{{.NetworkSettings.IPAddress}}’ 容器名称 | 容器id查询容器的IP进行查询
master_port:Master的端口号,指的是容器的端口
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position开始读,即上文中提到Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

启动slave

在slave的MySQL客户端下执行

#启动
start slave;
#查看状态
show slave status \G;

在这里插入图片描述
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两个参数必须是yes才算同步开启了。
如果有错误,在这个命令窗口也能看到错误原因

主从同步测试

在主库表里写入一条记录,在从库表里能够查询到。

踩坑

1.从库的只读是指非超级用户,如果是root权限的用户,是可以读写的。
2.如果主从没有同步成功,可以通过show slave status \G;命令查看下错误原因。
3.在主库中添加用户后,导致同步失败。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于docker部署MySQL主备的基本步骤: 1. 安装dockerdocker-compose 首先需要安装dockerdocker-compose,可以根据您的操作系统选择对应的安装方法。 2. 编写docker-compose文件 在您的项目目录中创建docker-compose.yml文件,并编写MySQL主备服务的配置信息,如下所示: ``` version: '3.2' services: master: image: mysql:5.7 container_name: master restart: always environment: MYSQL_ROOT_PASSWORD: your_master_password MYSQL_DATABASE: your_database_name volumes: - ./data/master:/var/lib/mysql networks: - db-network command: --server-id=1 --log-bin=mysql-bin --binlog-do-db=your_database_name slave: image: mysql:5.7 container_name: slave restart: always environment: MYSQL_ROOT_PASSWORD: your_slave_password MYSQL_DATABASE: your_database_name MYSQL_MASTER_HOST: master MYSQL_MASTER_USER: root MYSQL_MASTER_PASSWORD: your_master_password MYSQL_MASTER_PORT: 3306 volumes: - ./data/slave:/var/lib/mysql networks: - db-network depends_on: - master command: --server-id=2 --log-bin=mysql-bin --binlog-do-db=your_database_name --relay-log=slave-relay-bin --relay-log-index=slave-relay-bin.index --relay-log-info-file=relay-log.info --skip-slave-start networks: db-network: ``` 这个docker-compose文件定义了两个服务,一个是MySQL主服务,另一个是MySQL从服务。在主服务的配置中,定义了server-id、log-bin和binlog-do-db等参数,用于开启MySQL主备同步。在从服务的配置中,定义了MYSQL_MASTER_HOST、MYSQL_MASTER_USER、MYSQL_MASTER_PASSWORD和MYSQL_MASTER_PORT等参数,用于连接MySQL主服务并进行数据同步。 3. 启动服务 执行以下命令启动服务: ``` docker-compose up -d ``` 4. 验证主备同步 可以连接到MySQL主服务,创建表并插入数据,然后连接到MySQL从服务,查看是否同步成功。 以上就是基本的docker部署MySQL主备的步骤。需要注意的是,由于MySQL主备同步需要大量的网络带宽和计算资源,因此在实际应用中需要根据需求进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值