Docker实战之MySQL主从复制[亲测有效]

Docker实战之MySQL主从复制[亲测有效]前言 曾几何时,看着高大上的架构和各位前辈高超的炫技,有没有怦然心动,也想一窥究竟?每当面试的时候,拿着单应用的架构,吹着分库分表的牛X,有没有心里慌的一批? 其实很多时候,我们所缺少的只是对高大上的

Docker实战之MySQL主从复制

前言

曾几何时,看着高大上的架构和各位前辈高超的炫技,有没有怦然心动,也想一窥究竟?每当面试的时候,拿着单应用的架构,吹着分库分表的牛X,有没有心里慌的一批?

其实很多时候,我们所缺少的只是对高大上的技术的演练。没有相关的业务需求,没有集群环境,然后便只是Google几篇博文,看下原理,便算是了解了。然而真的明白了吗?众多的复制粘贴中,那篇文章才对我们有用,哪些又是以讹传讹?

所幸容器技术的快速发展,让各种技术的模拟成为现实。接下来Docker相关的一系列文章,将以实战为主,帮助大家快速搭建测试和演练环境。

Docker文件编排

由于是测试为了演练用,这里用docker-compose进行配置文件的编排,实际的集群环境中并不是这么部署的。

  1. 编排docker-compose-mysql-cluster.yml,安装master和slave节点
version: '3'
services:
  mysql-master:
    image: mysql:5.7
    container_name: mysql-master
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - "3307:3306"
    volumes:
      - "./mysql/master/my.cnf:/etc/my.cnf"
      - "./mysql/master/data:/var/lib/mysql"
    links:
      - mysql-slave

  mysql-slave:
    image: mysql:5.7
    container_name: mysql-slave
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - "3308:3306"
    volumes:
      - "./mysql/slave/my.cnf:/etc/my.cnf"
      - "./mysql/slave/data:/var/lib/mysql"

代码100分

  1. 配置master配置文件my.cnf
代码100分[mysqld]
# [必须]启用二进制日志
log-bin=mysql-bin 
# [必须]服务器唯一ID,默认是1,一般取IP最后一段  
server-id=1
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql
  1. 配置slave配置文件my.cnf
[mysqld]
# [必须]服务器唯一ID,默认是1,一般取IP最后一段  
server-id=2
  1. 启动docker-compose,创建docker镜像文件
代码100分docker-compose -f docker-compose-mysql-cluster.yml up -d

docker ps查看进程,可以看到2个实例已启动。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
1f4ad96b4d5e        mysql:5.7           "docker-entrypoint.s…"   48 seconds ago      Up 46 seconds       33060/tcp, 0.0.0.0:3307->3306/tcp   mysql-master
8e2214aacc43        mysql:5.7           "docker-entrypoint.s…"   49 seconds ago      Up 47 seconds       33060/tcp, 0.0.0.0:3308->3306/tcp   mysql-slave

配置主从复制

  1. 配置master

Docker实战之MySQL主从复制[亲测有效]

  1. 配置slave

Docker实战之MySQL主从复制[亲测有效]

这时候就可以运行一些 SQL 语句来验证同步服务是否正常了。

验证主从复制

  1. master创建db

Docker实战之MySQL主从复制[亲测有效]

  1. 查看slave是否同步创建

Docker实战之MySQL主从复制[亲测有效]

由结果可知,已完成MySQL主从复制环境的搭建。

读写分离

MySQL主从复制是其自己的功能,实现读写分离就得依靠其他组件了,比如sharding-jdbc。但是sharding-jdbc只是实现读写分离,本身的权限控制还是需要MySQL这边来配置的。

  1. 配置master账户及权限

创建帐号并授予读写权限

CREATE USER 'master'@'%' IDENTIFIED BY 'Password123';
GRANT select,insert,update,delete ON *.* TO 'master'@'%';
flush privileges;

Docker实战之MySQL主从复制[亲测有效]

  1. 配置slave账户及权限

创建帐号并授予只读权限

use mysql;
CREATE USER 'slave'@'%' IDENTIFIED BY 'Password123';
GRANT select ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

Docker实战之MySQL主从复制[亲测有效]

最后

这篇文章以搭建环境为主,后续会继续完善故障转移、分库分表、数据平滑迁移等相关演练。菜鸟博客,不尽完善,希望大家不吝赐教。

公众号 【当我遇上你】
Docker实战之MySQL主从复制[亲测有效]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9767.html

(0)
上一篇 2023-02-01
下一篇 2023-02-01

相关推荐

  • python微信自动回复脚本(Python自动回复代码)

    python微信自动回复脚本(Python自动回复代码)您好!很高兴能为您解答,   最近在网上转悠, 无意中发现一个python库:itchat, 这个库能用来干嘛呢, 用这个库可以实现很多有趣的功能如: 微信群发、检测好友是否被你拉黑、让你的微信实现自动回复等。 原理大概是封装了微信网页版的http请求。 想起前几天写的爬取糗事百科的爬虫, 觉得两者可以合在一起, 把自己的微信做成一个可以自动回复段子的简单机器人。

    2023-11-29
    116
  • 在centos7.x环境中SQL Server附加数据库[亲测有效]

    在centos7.x环境中SQL Server附加数据库[亲测有效]第一步,准备好windows与Linux之间文件传递的工具,下载并安装 https://winscp.net/eng/download.php 第二步,把本地的数据库文件拷贝一份,放到别的文件夹中,因

    2023-01-31
    257
  • 录屏教学软件哪个好_录制教学视频用什么软件

    录屏教学软件哪个好_录制教学视频用什么软件**需要录制教学视频?**最近,吉林新增4例本土病例,内蒙古新增1例境外输入病例。所以现在很多省市的学生还是不能返校,需要在家看教学视频的,那有人会用软件录制教学视频以备回放,所以小编今天推荐一款好…

    2023-03-05
    157
  • Python Tuple定义及常见操作

    Python Tuple定义及常见操作Python中Tuple是一种不可变序列,使用小括号”()”来定义。Tuple中可以存储任意类型的数据,包括数字、字符串、列表等等。Tuple拥有列表(List)所有的基本操作,比如切片,索引,迭代操作等。在使用元组时,需要注意它是不可变的,这意味着我们不能直接对元组进行增加、删除或修改操作。然而,我们可以通过创建一个新的元组来对原有元组进行操作或使用内置函数。

    2023-12-05
    104
  • 现在业内常用的MySQL高可用方案有哪些?

    现在业内常用的MySQL高可用方案有哪些?目录 如何将excel数据导入MySQL表中? 用xtrabackup跑mysql物理备份,建议授予哪些权限? select里用rand(),怎么优化效率? 现在业内常用的MySQL高可用方案有哪些…

    2022-12-24
    141
  • 使用Python字符串分割split方法来实现标题包装

    使用Python字符串分割split方法来实现标题包装在Python中,字符串是一个很重要的数据类型。我们在开发的过程中,很多时候都需要对字符串进行操作。其中,split()方法是常用的一种字符串操作方法。本文将介绍如何使用Python字符串分割split方法来实现标题包装。

    2024-04-28
    71
  • 第16问:创建一张表时,MySQL 的统计表是如何变化的?[亲测有效]

    第16问:创建一张表时,MySQL 的统计表是如何变化的?[亲测有效]本文关键字: 统计表,debug 问题 我们知道在 MySQL 中创建一张表时,一些统计表会发生变化,比如:mysql/innodb_index_stats,会多出几行对新表的描述。 那么会变更几张…

    2023-03-25
    156
  • Python的strip函数实现字符串去除首尾指定字符的操作

    Python的strip函数实现字符串去除首尾指定字符的操作在Python中,字符串是一个非常基础的数据类型。在字符串的操作过程中,经常需要对字符串进行首尾去除指定字符的操作。Python提供了strip函数用于完成这一操作。

    2024-03-03
    87

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注