MySQL读写分离之MySQL 双主双从

MyCat实现MySQL读写分离(单主单从单库) 在数据库集群架构中,主数据库负责处理事务性查询(写入操作),而从数据库只负责处理select查询(读操作),这样可以提高数据库整体读写性能。主数据库另外一个功能就是负责将数据变更同步到从数据库中。 读写分离的作用 1)分摊服务器压力,提高机器的系统处理效率。 2)当写入操作不变时,就可以大大分摊读取操作的压力,提高系统性能。另外,当读取操作的压力被分摊后,又间接提高了写入的性能。因此,数据库整体读写性能提高了。 3)增加冗余,提高服务可用性。 阅读详情

MySQL 双主双从实现读写分离

本节是基于上一节继续扩展,基于Docker 实现MySQL 2主2从(读写分离)

一、2 主 2从架构解析

1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);

4.所有提供服务的从服务器与masterB进行主从同步(双主多从);

架构简易图如下:

服务节点节点状态
192.168.190.165既是主节点也是从节点,与183互为主从
192.168.190.183既是主节点也是从节点,与165互为主从
192.168.190.184是183的从节点
192.168.190.185是165的从节点

在这里插入图片描述

二、主节点配置

这里是对 192.168.190.165 和 192.168.190.183 2个互为主从的主节点 做统一的配置

1.1. 编写docker-compose.yml 文件

  • 创建目录 mkdir /usr/local/docker/mysql/
  • cd /usr/local/docker/mysql/ && mkdir data conf
  • vim docker-compose.yml
version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - ./data:/var/lib/mysql
      - ./conf:/etc/mysql/mysql.conf.d

1.2. 编写MySQL配置文件mysqld.cnf

第1个主节点配置

192.168.190.165 在 /usr/local/docker/mysql/conf/ 目录下创建,mysqld.cnf文件,并加入以下配置

[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir    = /var/lib/mysql

symbolic-links=0

server-id = 165
log-bin = mysql-bin
enforce_gtid_consistency = ON
gtid_mode = ON

auto_increment_increment=2
auto_increment_offset=2
log-slave-updates
sync_binlog=1
第2个主节点配置

192.168.190.183 在 /usr/local/docker/mysql/conf/ 目录下创建,mysqld.cnf文件,并加入以下配置

[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir    = /var/lib/mysql
symbolic-links=0

server-id = 183
log-bin = mysql-bin
enforce_gtid_consistency = ON
gtid_mode = ON

auto_increment_increment=2
auto_increment_offset=1
log-slave-updates
sync_binlog=1

1.3 查看2个主节的 状态

1、启动mysql: cd /usr/local/docker/mysql/ && docker-compose up -d

2、进入容器:docker exec -it mysql /bin/bash

3、登录容器中mysql server : mysql -uroot -p123456

  • 192.168.190.195 主节点1状态
mysql> show master status \G;
*************************** 1. row ***************************
             File: mysql-bin.000005
         Position: 495
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 83039ec9-d923-11e9-b99b-0242c0a82002:1-11,
fe718590-d923-11e9-8508-0242c0a8c002:1-7
1 row in set (0.00 sec)

  • 192.168.190.183 主节点2状态
mysql> show master status \G;
*************************** 1. row ***************************
             File: mysql-bin.000005
         Position: 495
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 83039ec9-d923-11e9-b99b-0242c0a82002:1-11,
fe718590-d923-11e9-8508-0242c0a8c002:1-7
1 row in set (0.00 sec)


1.4. 设置2个主节点的主从关系

## 1、在主节点配置主从复制账号(2个主节点都执行一遍)
create user 'bpm'@'%' identified by '123456';
grant replication slave on *.* to bpm;

## 2、设置主从关系
### 2.1 192.168.190.195 节点设置 需要同步的节点(主库节点)
change master to 
master_host='192.168.190.183',
master_user='bpm',
master_password='123456';

### 2.2 192.168.190.183 节点设置 需要同步的节点(主库节点) 
change master to 
master_host='192.168.190.195',
master_user='bpm',
master_password='123456';

1.5 开启主从复制

  • 192.168.190.195 节点(Slave_IO_Running 、Slave_SQL_Running 都必须为Yes)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.190.183
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: 7b7d4c2fe2d3-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes 
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table:
  • 192.168.190.183 节点(Slave_IO_Running 、Slave_SQL_Running 都必须为Yes)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.190.165
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: 117fd52ec5fe-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 

三、从节点配置

这里主要是对 192.168.141.57 (是192.168.141.54的从节点) 、192.168.141.58 (是192.168.141.55的从节点)

做统一的配置

2.1 编写docker-compose.yml 文件

version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - ./data:/var/lib/mysql
      - ./conf:/etc/mysql/mysql.conf.d

2.2 编写MySQL配置文件mysqld.cnf

[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir    = /var/lib/mysql

symbolic-links=0

server-id=184
enforce_gtid_consistency = ON
gtid_mode = ON

2.3 启动MySQL

  • 启动mysql: cd /usr/local/docker/mysql/ && docker-compose up -d
  • 进入容器:docker exec -it mysql /bin/bash
  • 登录容器中: mysql server : mysql -uroot -p123456

2.4 开启主从配置

从节点1

开启从节点 192.168.190.184 复制 主节点192.168.190.183

change master to 
master_host='192.168.190.183',
master_user='bpm',
master_password='123456';

start slave

查看从节点信息

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.190.183
                  Master_User: bpm
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 3060753
               Relay_Log_File: 53afe365d437-relay-bin.000004
                Relay_Log_Pos: 3060966
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
           
           
           ..... 省略
从节点2

开启从节点 192.168.190.185 复制 主节点192.168.190.165

change master to 
master_host='192.168.190.165',
master_user='bpm',
master_password='123456';

start slave

查看从节点信息

mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.190.165
                  Master_User: bpm
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 495
               Relay_Log_File: e7bbc17474b2-relay-bin.000008
                Relay_Log_Pos: 708
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
          
。。。。。省略

ster_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 495
               Relay_Log_File: e7bbc17474b2-relay-bin.000008
                Relay_Log_Pos: 708
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
          
。。。。。省略
MySQL双主双从读写分离 在MySQL多主多从的架构配置中和双主双从是一样的,学会了双主双从的架构部署,多主多从的配置也同样就回了。下面以双主双从作为示例演示。 阅读详情

相关推荐

MySQL 双主双从+读写分离配置

MySQL 双主双从+读写分离配置 1.架构图如下 2.配置如下 Master1,即百度1配置: [mysqld] # 启用二进制日志 log-bin=mysql-bin # 唯一服务id server-id=1(重点,必须唯一) # 需要复制的数据库名 binlog-do-db=testdb # 设置log-bin格式 binlog_format=STATEMENT # 作为从库时写入bin-log日志(重点) log-slave-updates # 设置自增递增量(重点) auto-inc

u011622021的博客 808

mysql主从复制,读写分离,双主双从复制,读写分离

主从复制是将主数据库的数据通过二进制日志(binlog)传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步。双主双从复制

生夏夏的博客 2575

mysql双主双从-读写分离

中途遇到的问题: Slave_IO_Running: No,原因是我在新建虚拟机的时候,直接克隆装好了mysql的机器,导致uuid重复,vim /var/lib/mysql/auto.cnf,把uuid修改成唯一的再重启mysqld服务,再次登录mysql,执行:STOP REPLICA IO_THREAD FOR CHANNEL '';INSERT INTO mytable (name, age, address) VALUES ('sxy', 21, '邵阳'), ('tx', 21, '永州');

qq_59337657的博客 311

mysql双主双从_MYSQL读写分离之--MYSQL主从复制、主主复制、双主多从配置

MySQL 主从复制原理:从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;MySQL 主从复制主要用途:...

weixin_29122543的博客 417

资源描述框架RDF及Turtle

文章目录1. RDF1.1 简介1.2 格式1.3 RDF的要求2. Turtle2.1 语法2.1.1 简单三元组2.1.2 Turtle中的命名空间2.1.3 Base URI2.1.4 谓语列表2.1.5 宾语列表2.1.6 空白节点(bNodes)2.1.7 数据类型2.1.8 Class membership2.1.9 空URI2.1.10 集合 1. RDF 1.1 简介 RDF(Resource Description Framework)语义网的标准数据模型,是一个用于描述 Web 上的资

doublewhite233的博客 2495

Veeam Backup 13 通过UI界面高效备份VMware ESXi虚拟机的完整指南

本文提供了一份使用Veeam Backup 13图形化界面高效备份VMware ESXi虚拟机的完整指南。内容涵盖从环境准备、添加vCenter/ESXi主机、配置备份存储库,到创建备份任务、设置保留策略与计划,以及执行备份和验证成功的关键步骤。通过直观的UI操作,管理员可以轻松实现虚拟机数据的可靠保护与快速恢复。

weixin_29322553的博客 438

mysql从库可以有多个主库吗_mysql主从复制的原理,配置方法及在线添加多个从库...

数据库主从复制原理: 顾名思义,数据库的主从复制就是从master数据库复制到slave数据库,在master与slave之间实现整个复制需要三个线程来完成,其中两个在slave端一个在master端。 在master端必须打开binlog功能,因为从数据库需要获得主数据的完整的操作日数据库主从复制原理:顾名思义,数据库的主从复制就是从master数据库复制到slave数据库,在master与sl...

weixin_35796207的博客 1266

电源设计避坑指南:半桥LLC软启动的5个常见错误及解决方案

本文针对半桥LLC谐振变换器软启动过程中的五个常见设计错误,提供了详细的工程解决方案。重点分析了忽视谐振腔初始状态导致的电流冲击、软启动斜坡与环路带宽不匹配、开环到闭环切换时机不当、变压器偏磁以及参数未考虑边界条件等问题,并给出了包括主动预充电、自适应斜坡、最佳切换点判定等实用调试技巧,帮助工程师实现平稳可靠的电源启动。

weixin_29260291的博客 281

Mysql读写分离

MySQL数据库默认是支持主从复制的,底层基于MySQL数据库自带的二进制日志功能实现。也成为binlog,这是MySQL自带的一种日志功能,它会记录下所有的增删改语句,但是不包括查询语句。MySQL的主从复制其实就是由主库生成binlog,里面记录用户对数据库产生影响的操作。从库负责读取这个日志,并进行解析得到对应的SQL语句,然后在自己所在的服务器上执行,就可以得到跟主库一致的数据了。master将数据变更写入二进制日志slave将master的二进制日志拷贝到它的中继日志(relay log)

weixin_64949779的博客 191

SAP ABAP开发避坑:BAPI_MATVAL_PRICE_CHANGE调用报‘估价未维护’的完整解决流程

本文深入解析SAP ABAP开发中调用BAPI_MATVAL_PRICE_CHANGE函数时遇到的'估价未维护'错误,提供从基础配置检查到CKML_PRICE_SEND表维护的完整解决方案。通过实战案例和代码示例,帮助开发者快速定位问题并实现批量价格更新的自动化处理,提升开发效率。

weixin_28705087的博客 427

UG二次开发之 三面摆正体代码分析

CIUGUIBlock 是一个从UIBlock 派生的一个类,为什么要从UIBlock 派生出CIUGUIBlock,这是为了兼容低版的UG。如果我们不从的UIBlock 派生控件类对象指针,在UG 8.5以下的版本,会出现编译错误的问题。这是一个简单的入门功能,包括了不少的常用的UF函,下面我们将结合成品代码一起分析一下常用的函数,这对初学者是必要的。根据创建好的UI控件,在 initialize_cb 中创建控件的指针对象。//根据选定的面,指定 X,Y坐标系轴。//根据变换的矩阵,平移实体。

u014657217的博客 351

MySQL运维16-双主双从读写分离

在MySQL多主多从的架构配置中和双主双从是一样的,学会了双主双从的架构部署,多主多从的配置也同样就回了。下面以双主双从作为示例演示。

dsgdauigfs的博客 1655

本地部署DeepSeek并搭建量化交易系统:完整指南

本地部署DeepSeek并搭建量化交易系统指南 本文提供了一套完整的本地部署DeepSeek大语言模型并构建量化交易系统的技术方案。系统包含以下核心组件: 环境配置:详细说明Ubuntu系统、NVIDIA显卡驱动、CUDA和Python环境的安装要求,推荐使用conda管理依赖 DeepSeek部署: 通过HuggingFace下载7B或13B量化版本模型 使用4-bit量化技术降低显存需求 封装为FastAPI服务提供推理接口 量化系统架构: 模块化设计,各组件通过Redis解耦 包含数据获取、因子计算、

huanghm88的专栏 478

MySQL - 读写分离、一主一从、双主双从

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。MyCat实现读写分离的话,主要通过两个组件来实现:读写分离它的前提是基于主从复制主从复制的原理是基于MySQL的二进制日志Binlog来实现的如果是读的操作,我们就直接连接从节点,如果是写的操作,直接连主节点应用程序不用直接连接MySQL,否则会很繁琐,因为会有多个服务器数据库。

weixin_51351637的博客 4066

一文让你轻松理解802.11ax RU的概念

RU

1042484520@qq.com(邮箱) 3368

【乐企文件生成工程】添加数据库、SpringEvent事件支持

更新!1、乐企版式文件生成工程添加数据库支持2、乐企版式文件生成工程添加事件机制,异步处理文件生成,提高系统并发能力。

九七的博客 336

mysql--2.双主双从,读写分离

-master1和slave1--!

2401_84008551的博客 684

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mysql搭建双主双从服务,实现主从复制&&使用mycat实现读写分离

一个主机 m1 用于处理所有写请求,它的从机 s1 和另一台主机 m2 还有它的从机 s2 负责所有读请求。当 m1 主机宕机后,m2 主机负责写请求,m1、m2 互为备机。架构图如下: 1. 搭建 MySQL 数据库主从复制(双主双从) 1.1 双主配置 Master1配置: 修改配置文件:vim /etc/my.cnf #主服务器唯一ID server-id=1 #启用二进制日志 log-bin=mysql-bin # 设置不要复制的数据库(可设置多个) binlog-ignore-db=mysql

前路无畏的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MySQL双主双从与ProxySQL读写分离实战

mysql双主双从,顾名思义,就是有两个主服务器,两个(或多个)从服务器。单个主服务器如果故障,会影响全局的写入事件。双主服务器可以解决这个问题。

XTHY___的博客 1434

Mycat实现Mysql的一主一从和双主双从读写分离

前提是: 已经有了一主一从的Mysql服务架构。 已经安装启动好了mycat。并对mycat有一定了解。 实现 修改mycat的schema配置文件: <!--schema 标签用于定义 MyCat 实例中的逻辑库--> <!-- name是逻辑库的名称,客户端连接mycat是看到这个数据库名称的--> <!-- dataNode是设置逻辑库的真实数据库分片节点--> <schema name="producer" checkSQLschema="true"

qq_40837310的博客 633

Mycat实现MySQL主从复制和读写分离(双主双从)

目录 1 机器准备 2 mysql双主双从安装 2.1 mysql的安装 2.2 验证 3mycat的安装 3.1 mycat的配置文件 3.2 验证服务 4 验证读写分离 4.1 验证写操作 4.2 验证读操作 5 主从切换 5.1 故障演示 5.2 恢复master节点 1 机器准备 机器名 ip 角色 wyl01 192.168.52.1...

wyl9527的博客 2696

Mysql-双主双从复制及读写分离-6

双主双从

qq_50660509的博客 303

MyCat搭建MySQL一主一从与双主双从读写分离

通过Mycat和MySQL的主从同步复制配合就可以搭建MySQL数据库的读写分离,这里以MyCat搭建MySQL一主一从与双主双从2种读写分离模式。

积跬步,至千里。 586

MySQL-双主双从复制及读写分离 第八天

双主双从复制 环境准备 准备四台mysql服务器,关闭防火墙和selinux,一定要确保关闭

fajixianshouhu的博客 879

Mycat实现MySQL主从复制和读写分离----mysql双主双从安装配置

1 机器准备 2 mysql双主双从安装配置 2.1 mysql的安装 2.2 配置和验证 3 mycat的安装 3.1 mycat的配置文件 3.2 验证服务 4 验证读写分离 4.1 验证写操作 4.2 验证读操作 5 主从切换 5.1 故障演示 5.2 恢复master节点 1 机器准备 规划:部署4个mysql数据库,其中mysql1 和mysql2 互为主从,mysql3是mysql1的从,mysql4是mysql2的从,这里数据库采用的mysql-5.7...

m0_67505608的博客 277

mysql主从复制、双主双从、读写分离以及分库分表

这边已安装好mysql版本为5.7、jdk等 一、环境准备 1.1 准备2台服务器,一台为主一台为从 二、一主一丛 2.1 在主服务器节点上修改/etc/my.cnf的文件增加如下命令 **注意:**在我的环境中必须把增加的命令放在mysqld下方、否则会报异常、原因不详!! #mysql服务唯一id,不同的mysql服务必须拥有全局唯一的id server-id=1 //这里有个小插曲!后面描述 #启动二进制日志 log-bin=mysql-bin #设置不要复制的数据库 binlog-ignore

tzxsc8的博客 593
上一篇: MySQL读写分离方案之 MySQL 一主多从
下一篇: MySQL 读写分离方案之 基于Mycat 实现MySQL 读写分离
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值