🤖
BOKE
  • 😇一个博客
  • Group 1
    • 🚗ALL
      • 😁一文搞懂Yum命令:红帽系的包管理器
      • 😆到底什么是云计算
      • 😅反弹Shell大全与原理
      • 😂SHELL基础
      • 🤣iptables
      • ☺️阿里云YUM源
      • 😉CentOS系统版本升级
      • 🥲bat笔记
      • 😍ELK
      • 🥰黑马k8s
      • 😋supervisor
      • 🤨Bash 中的 ${} 和 $() 有什么区别
      • 🧐ansible+playbook
      • 👍给ELK的kibana设置密码
      • 😁prometheus
      • 😃Linux或Windows上实现端口映射
      • 😄shell脚本大全
      • 🤪linux修改网卡名
      • 😆Openvpn问题导致我掉了三根头发
      • 😅Iptables实现阿里云NAT网关效果
    • 🚕docker
      • 😇docker搭建MySQL主从
      • 😊docker命令
      • 🙂docker文件分层与数据挂载
      • 🙃dockerfile
      • 😘B站狂神-docker
    • 🚙DevOps
      • 😌DevOps(Git+Jenkins)
      • 😛python配置git
由 GitBook 提供支持
在本页
  • 主实例搭建
  • 从实例搭建
  • 主从库连接
  • 主从复制测试

这有帮助吗?

  1. Group 1
  2. docker

docker搭建MySQL主从

主实例搭建

  • 运行mysql主实例:

docker run -p 3306:3306 --name mysql-master \
-v /var/mysql-cluster/mysql-master/log:/var/log/mysql \
-v /var/mysql-cluster/mysql-master/data:/var/lib/mysql \
-v /var/mysql-cluster/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
--restart=always  \
-d mysql:5.7.30
  • 在mysql的配置文件夹/var/mysql-cluster/mysql-master/conf中创建一个配置文件my.cnf:

cd /var/mysql-cluster/mysql-master/conf
touch my.cnf
  • 修改配置文件my.cnf,配置信息如下:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=10M
## 设置使用的二进制日志格式(mixed,statement,row)这里采用row模式,方便后续 canal监听
binlog_format=row
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
  • 修改完配置后重启实例:

docker restart mysql-master
  • 进入mysql-master容器中:

docker exec -it mysql-master /bin/bash
  • 在容器中使用mysql的登录命令连接到客户端:

mysql -uroot -proot
  • 创建数据同步用户:

# 创建账号
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

# 赋予权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

从实例搭建

  • 运行mysql从实例:

docker run -p 3307:3306 --name mysql-slave \
-v /var/mysql-cluster/mysql-slav/log:/var/log/mysql \
-v /var/mysql-cluster/mysql-slave/data:/var/lib/mysql \
-v /var/mysql-cluster/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
--restart=always  \
-d mysql:5.7.30
  • 在mysql的配置文件夹/var/mysql-cluster/mysql-slave/conf中创建一个配置文件my.cnf:

touch my.cnf
  • 修改配置文件my.cnf:

[mysqld]
## 设置server_id,同一局域网中需要唯一,且要设置的比master中的server_id要大
server_id=102
## 通过过滤数据库(忽略同步的库 可多个)
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用,用 mysql-slave1-bin 作为Binlog日志前缀 
log-bin=mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=10M
## 设置使用的二进制日志格式(mixed,statement,row),row表示按行读取,后续可提供第三方Binlog读取工具使用,如canal
binlog_format=row
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
  • 修改完配置后重启实例:

docker restart mysql-slave

主从库连接

  • 首先连接到主数据库的mysql客户端,查看主数据库状态:

docker exec -it mysql-master /bin/bash
mysql -uroot -proot
show master status;
  • 主数据库状态显示如下:

  • 然后进入mysql-slave容器中:

docker exec -it mysql-slave /bin/bash
  • 在容器中使用mysql的登录命令连接到客户端:

mysql -uroot -proot
  • 在从数据库中配置主从复制:

change master to master_host='172.17.0.8', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
  • 主从复制命令参数说明:

    • master_host:主数据库的IP地址;

    • master_port:主数据库的运行端口;

    • master_user:在主数据库创建的用于同步数据的用户账号;

    • master_password:在主数据库创建的用于同步数据的用户密码;

    • master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

    • master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

    • master_connect_retry:连接失败重试的时间间隔,单位为秒。

  • 查看主从同步状态:

show slave status \G;

觉得查看不方便也可以直接连接slave从库,使用navicat执行该命令

  • 从数据库状态显示如下:

  • 开启主从同步:

在从库执行下边命令

start slave;
  • 查看从数据库状态发现已经同步:

主从复制测试

主库做的DML 、DDL操作已被从库捕获到且进行了复制操作!主从同步完成!

上一页docker下一页docker命令

这有帮助吗?

image-20210916220043432
image-20210915231939809
image-20210916220318026
image-20210916220540328
image-20210916220628216
image-20210916220734220
🚕
😇