IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Docker + Mysql 主从集群搭建 -> 正文阅读

[大数据]Docker + Mysql 主从集群搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、简介

本文介绍的是在 docker 中部署 mysql 主从集群,实现读写分离。
数据文件和配置文件均进行外部映射

二、原理

  • master 更新数据被写到 binlog
  • slave 发起连接,连接到 master
  • master 创建 binlog dump 线程,并把 binlog 发送到 slave
  • slave 启动,创建 I/O 线程,用于读取 master 发送的 binlog,并写到 relay log内
  • slave 创建 sql 线程,从 relay log 中读取,从 ExecMasterLog_Pos 位置开始执行读取到的事务,并写入 slave

三、搭建

请添加图片描述

2.1 master 配置

master 配置文件 master-cnf

[mysqld]
# 设置同一局域网内server-id必须具有唯一性
server-id=1

# 指定复制哪些数据库
binlog-do-db=test

# 指定不复制哪些数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

# 开启二进制日志功能, 并设置日志文件名, 文件名可随意起名
log-bin=mysql-bin

# 设置 binlog 日志格式, 其值可谓 row(默认)、statement、mixed
binlog_format=statement

# 设置每隔多少次事务提交操作才会将这些操作写入二进制日志文件
sync_binlog=1

# 默认使用 “mysql_native_password” 插件认证
default_authentication_plugin=mysql_native_password

2.2 slave 数据库配置

slave 配置文件 slave-cnf

[mysqld]
# 设置同一局域网内server-id必须具有唯一性
server-id=2

# 开启二进制日志功能, 并设置日志文件名, 文件名可随意起名
# log-bin=mysql-slave-bin

# 指定中继日志
relay-log=slave-relay-bin

# 默认使用 “mysql_native_password” 插件认证
default_authentication_plugin=mysql_native_password	

2.3 创建master 和 slave 数据库

  • docker-compose.yml

version: '3.7'
services:
  master: # 主数据库
    image: mysql:latest
    container_name: mysql-master
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_TCP_PORT=3336
    ports:
      - "3336:3336"
    networks:
      - backend
    volumes:
      - ./mysql-master.cnf:/etc/mysql/my.cnf # 配置文件映射
      - ./data/master:/var/lib/mysql # 数据文件映射

  slave01: # 从数据库
    image: mysql:latest
    container_name: mysql-slave01
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_TCP_PORT=3337
    ports:
      - "3337:3337"
    networks:
      - backend
    volumes:
      - ./mysql-slave.cnf:/etc/mysql/my.cnf  # 配置文件映射
      - ./data/slave01:/var/lib/mysql # 数据文件映射

networks:
  backend:
    name: master_slave
  • 启动 docker 镜像

    # 切换到数据库配置文件目录根下 cmd 执行
    docker compose up -d
    
  • master 中创建 slave 连接账号

    # 可以使用 navicat 连接 master 数据库 执行 sql
    create user 'master'@'%' identified by '123456';
    grant replication slave, replication client on *.* to 'master'@'%';
    
  • 查看 master 主节点状态并记录状态

    # 可以使用 navicat 连接 master 数据库 执行 sql
    show master status;
    

    ps:下图 file 名称要与 .cnf 文件中配置的 log-bin 的名称一致

    请添加图片描述

    1. 如果不一致查看 docker 内镜像启动日志,如果有以下,则代表我们映射的配置文件未生效

      mysql: [Warning] World-writable config file ‘/etc/mysql/my.cnf‘ is ignored.
      
    2. 在 docker 容器内 执行

      cd /etc/mysql  # 切换到配置文件目录
      ls -l # 查看配置文件的权限信息
      
    3. 将更改配置文件权限

      chmod 644 my.cnf	
      
    4. 删除 docker 容器的对外映射的 data 信息和镜像,重新部署

2.4 主从同步设置

同步操作都在子节点进行

  • 关闭同步

    stop slave;
    
  • 设置同步信息
    如果 master 和 slave 在不在同一个机器或者不在同一个docker容器内:

    change master to 
    master_host="xxx.xxx.xxx.xxx",  # master IP 地址
    master_port=3336,        # master 对外映射端口
    master_user='master',
    master_password='123456',  # master中为slave设置的用户名
    master_log_file='mysql_bin.000003', # 对照上面master查询到的信息中 file
    master_log_pos=676, # 对照上面master查询到的信息中position
    master_connect_retry=30;
    

    如果 master 和 slave 在同一个docker容器内:

    change master to 
    master_host="mysql-master",  # 容器中 master 的容器名称
    master_port=3336,        # master 对外映射端口
    master_user='master',  # master中为slave设置的用户名
    master_password='123456'
    master_log_file='mysql_bin.000003', # 对照上面master查询到的信息中 file
    master_log_pos=676, # 对照上面master查询到的信息中position
    master_connect_retry=30;
    
  • 开启同步

    start slave;
    

四、验证同步

  • master 数据库

    根据 master 配置文件中,需要同步的数据库是 test,则创建 test数据库,再创建表 插入数据

  • slave 数据库

    查看 test 数据库以及内部数据

  • 结果

    master 中创建的数据库和表以及数据,在 slave 中都能找到,则完成同步

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:03:44  更:2022-09-24 21:04:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:09:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码