docker配置MySQL主从模式

  1. 首先我们去准备一个MySQL8+,docker即可
  2. 创建MySQL数据卷目录

   // 主服务器容器卷创建

   mkdir -p /mydata/mysql-master/conf

  1. 创建容器并运行

  这个是主的

   docker run -d -p 3307:3306 --privileged=true -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql/conf.d -v /mydata/mysql-master/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456  --name mysql-master mysql+

4.配置文件

cd /mydata/mysql-master/conf

touch my.cnf

5.文件内容

  [client]

default_character_set=utf8

[mysql]

default-character-set=utf8mb4

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=101

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql  

## 开启二进制日志功能

log-bin=mall-mysql-bin  

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

binlog_cache_size=1M  

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

binlog_format=mixed  

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

expire_logs_days=7  

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

## 设置编码

collation_server = utf8_general_ci

character_set_server = utf8

##解决 mysql 2059 错误,没有此问题的不加

default_authentication_plugin=mysql_native_password

  1. 重启一下容器

docker restart mysql-master

  1. 容器内配置

进入容器docker exec -it mysql-master /bin/bash

今日MySQL   mysql -uroot -p123456 ,这里记住密码是123456,复杂密码最后的时候回报错

  1. 创建从服务器连接用户

  // 创建用户名为 slave,后面从库需要连接到这个用户上,by 后面的密码和数据库密码没有关系

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

// 授权表示可以从任意 ip 使用此用户名和密码连接到主数据库

GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';

// 刷新配置

flush privileges;

// 查看日志文件 这个可以不执行

show master status;

  1. 从服务器搭建

 // 主服务器容器卷创建

mkdir -p /mydata/mysql-slave/conf

10.创建容器并运行

   docker run -d -p 3307:3306 --privileged=true -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456  --name mysql-slavemysql+

  1. 配置文件

cd /mydata/mysql-slave/conf

touch my.cnf

  1. 文件内容

   [mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=102

## 指定不需要同步的数据库名称

binlog-ignore-db=mysql  

## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用

log-bin=mall-mysql-slave1-bin  

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

binlog_cache_size=1M  

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

binlog_format=mixed  

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

expire_logs_days=7  

## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062  

## relay_log配置中继日志

relay_log=mall-mysql-relay-bin  

## log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1  

## slave设置为只读(具有super权限的用户除外)

read_only=1

## 设置编码

collation_server = utf8_general_ci

character_set_server = utf8

##解决 mysql 2059 错误,没有此问题的不加

default_authentication_plugin=mysql_native_password

  1. 重启容器

   docker restart mysql-slave

  1. 进入主服务器操作

docker exec -it mysql-master /bin/bash

mysql -uroot -p123456

show master status;

  1. 主服务器操作,查看ip地址

   1.容器内查看

    docker exec -it mysql-master /bin/bash

cat /etc/hosts

2.容器外查看

  docker ps -a

docker inspect 容器名

  1. 主服务器操作:查看端口

 docker exec -it mysql-master /bin/bash

mysql -uroot -p123456

show global variables like 'port';

16.从服务器操作,配置从主连接

  docker exec -it mysql-slave /bin/bash

mysql -uroot -p123456

change master to master_host='主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='主机信息获取', master_log_pos= 820, master_connect_retry=30;

主机IP,为master主服务器的容器IP地址,图中标志③。

master_log_file,为master主服务器容器状态的值,图中标志①。

master_log_pos,为master主服务器容器状态的值,图中标志②。

master_port,为mater主服务器的容器内部数据库端口,图中标志④。

  1. 开启主从复制
  1. 从服务器操作,查看从数据库状态

 show slave status \G;

  1. 从服务器操作:启动主从复制

  docker exec -it mysql-slave /bin/bash

mysql -uroot -p123456

// 开启主从同步

start slave;

其他相关命令

Stop slave;

  1. 从服务器操作:查看从数据库状态

  show slave status \G;

这样就差不多成功了,还差最后两步

  1. 主从复制验证
  1. 主数据库操作

  docker exec -it mysql-slave /bin/bash

mysql -uroot -p123456

create database testdb;

  1. 从数据库操作

 docker exec -it mysql-slave /bin/bash

mysql -uroot -p123456

show databases;

最后验证一下,开发端口 3307,3308

连接数据库验证

出现这个就说明成功

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值