MySQL主从复制和读写分离

DolphinScheduler-3.2.0集群部署流程 阅读详情

主从复制

MySQL主从复制的原理

MySQL主从复制的类型

(1)基于语句的复制

在主服务器上执行的SQL语句,在服务器上执行相同的语句。MySQL默认采用基于语句的复制,效率较高。

(2)基于行的复制

把改变的内容复制过去,而不是把命令在服务器上执行一遍

(3)混合类型的复制

默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制

MySQL主从复制的工作过程

主(master)数据库启动 bin 二进制日志,这样会有一个 Dump 线程,这个线程是把主(master)数据库的写入操作都会记录到这个 bin 的二进制文件中。

然后从(slave)数据库会启动一个 I/O 线程(监控主服务器的二进制日志的变化),这个线程主要是把主(master)数据库的 bin 二进制文件读取到本地,并写入到中继日志(Relay log)文件中。

最后从(slave)数据库其他 SQL 线程,把中继日志(Relay log)文件中的事件再执行一遍,更新从(slave)数据库的数据,保持主从数据一致,重新写入数据库。

测试案例

环境搭建

准备三台安装了MySQL的服务器

配置master主服务器

配置mysql master主服务器

[root@localhost ~]# vi /etc/my.cnf

server-id=11           //修改
log-bin=master-bin      //修改
log-slave-updates=true    //添加    (可不用添加)
binlog-format = MIXED
log-slave-updates=true     //Slave可以是其他 Slave 的 Master,从而扩散 Master 的更新
binlog-ignore-db=test      //不记录指定的数据库的二进制日志  
replicate-ignore-db=test    #设置不需要同步的库
binlog_cache_size = 1M    #日志缓存的大小
expire_logs_days=3       #自动过期清理日志的天数

登录mysql创建从服务器用户,并授权

[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql -u root -p
mysql> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456' ;
mysql> flush privileges;
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 |      337 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.01 sec)
从服务器的配置
[root@localhost ~]# vi /etc/my.cnf
server-id       = 22            //修改,值不能和其他mysql服务器重复
relay-log=relay-log-bin           //添加(可不指定)
relay-log-index=slave-relay-bin.index   //添加(可不指定)

[root@localhost ~]# systemctl restart mysqld

登录MySQL

change master to master_host='192.168.10.101',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=337;
mysql> start slave;
mysql> show slave status\G           ##注意后面不要加分号

…………
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 //这两个的参数必须为yes  
验证主从复制 

在主从服务器上分别查询数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

在主服务器上创建数据库

mysql> create database db_test;

Query OK, 1 row affected (0.00 sec)



mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| mysql              |
| performance_schema |
| test               |
+--------------------+

5 rows in set (0.00 sec)

在从服务器上再次查询数据库,可以看到从服务器上也有了db_test数据库了

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_test            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

 读写分离

搭建MySQL读写分离

在主从复制的基础上再开两台主机

在主机amoeba上安装java环境

[root@localhost ~]# chmod +x jdk-6u14-linux-x64.bin
[root@localhost ~]# ./jdk-6u14-linux-x64.bin
[root@localhost ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6
[root@localhost ~]# vi /etc/profile
添加到最末尾:
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$JAVA_HOME/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin

[root@localhost local]# source /etc/profile
[root@localhost local]# java -version            ##查询版本,确定java安装成功

安装并配置amoeba

[root@localhost ~]# mkdir /usr/local/amoeba
[root@localhost ~]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@localhost ~]# chmod -R 755 /usr/local/amoeba/
[root@localhost ~]# /usr/local/amoeba/bin/amoeba
amoeba start|stop       //有此提示表示成功

配置amoeba读写分离

在三个mysql服务器中开放权限给amoeba访问(只在master中即可,会复制到slave中)

mysql> grant all on *.* to test@'192.168.10.%' identified by '123.com';

在amoeba上配置amoeba.xml文件

[root@localhost ~]# cd /usr/local/amoeba/conf
[root@localhost conf]# vi amoeba.xml
 <property name="user">amoeba</property>                 //30行

<property name="password">123456</property>               //32行

 <property name="defaultPool">master</property>             //115行

               
<property name="writePool">master</property>             //118行
<property name="readPool">slaves</property>    //19行此处的注释去掉

编辑dbServer.xml文件

[root@localhost conf]# vim dbServers.xml 


<property name="user">test</property>         //26行

                        
<property name="password">123.com</property>  //29行,去掉注释符

<dbServer name="master"  parent="abstractServer">        //第45行
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.10.101</property>
                </factoryConfig>
        </dbServer>

        <dbServer name="slave1"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.10.102</property>
                </factoryConfig>
        </dbServer>

        <dbServer name="slave2"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">192.168.10.103</property>
                </factoryConfig>
        </dbServer>

<dbServer name="slaves" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
       <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
       <property name="loadbalance">1</property>

       <!-- Separated by commas,such as: server1,server2,server1 -->
       <property name="poolNames">slave1,slave2</property>
                </poolConfig>
        </dbServer>

启动amoeba软件

[root@localhost amoeba]# bin/amoeba start&
[root@localhost amoeba]# netstat -anpt | grep java        //若没有后三行则尝试重启服务器,再次运行依旧没有的话再检查配置文件
tcp6       0      0 127.0.0.1:43820         :::*                    LISTEN      1447/java           
tcp6       0      0 :::8066                 :::*                    LISTEN      1447/java           
tcp6       0      0 192.168.10.104:39326    192.168.10.103:3306     ESTABLISHED 1447/java           
tcp6       0      0 192.168.10.104:49698    192.168.10.102:3306     ESTABLISHED 1447/java           
tcp6       0      0 192.168.10.104:42440    192.168.10.101:3306     ESTABLISHED 1447/java

测试

(1)在客户机上

[root@localhost yum.repos.d]# yum -y install mariadb
[root@localhost yum.repos.d]# mysql -u amoeba -p 123456 -h 192.168.10.104 -P 8066

(2)在master服务器上创建表

mysql> stop slave;
MySQL [test]> use auth
MySQL [auth]> create table users (id int(10),name char(20));

(3)在两个slave服务器上

mysql> stop slave;

(4)在master服务器上

mysql> insert into users values ('1','zhangsan');

(5)在slave1上

mysql> use auth;
mysql>insert into zang values ('2','zhangsan');

(6)在slave2上

mysql> use auth;
mysql>insert into zang values ('3','zhangsan);

(7)在client上查询三次

mysql> use auth;
mysql> select * from users;

对比三次的输出,验证读操作,发现没有在master写入的数据,而slave上写的能查到

(8)在client上

mysql> use auth;
mysql>insert into users values ('4','zhangsan');
mysql> select * from users;      ##发现在client上查询不到自己写的数据

(9)在master上

mysql> select * from users;      ##能查到在client上写入的数据,说明写操作在master上

(10)在slave上

mysql> select * from users;       ##发现没有数据,说明写入的操作是在master上

mysql主从复制&读写分离 文章目录本文内容前言1. MySQL主从复制1.1 介绍1.2 搭建1.2.1 准备工作1.2.2 主库配置1.2.3 从库配置1.3 测试2. 读写分离案例2.1 背景介绍2.2 ShardingJDBC介绍2.3 数据库环境2.4 初始工程导入2.5 读写分离配置2.6 测试3. 项目实现读写分离3.1 数据库环境准备3.2 创建Git分支3.3 读写分离配置3.4 功能测试3.5 Git合并代码 本文内容 MySQL主从复制 读写分离案例 项目实现读写分离 前言 1). 存在的问题 在前面基础 阅读详情

相关推荐

mysql主从复制 及读写分离

mysql主从复制 及读写分离 数据库对于任何企业都是至关重要的,数据库的备份冗灾非常重要。 MySQL的主从架构模型可以用来进行备份、故障迁移、或者读写分离来分担负载。 采用读写分离时,在程序中通过封装数据库访问层可以实现写操作连接主库,读操作连接从库。但是当从库较多时,程序中对多个从库做切换比较麻烦。 MySQL官方为我们提供了mysql-proxy这个代理组件,对于读写的sql操作,

大圣欲何的博客 852

Mysql 主从复制、读写分离

在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求 配置多台主从数据库服务器以实现读写分离。

2201_75549363的博客 1444

图形学常见概念小结

前言:本文记录《unity shader入门精要》和openGL相关学习过程中一些学习要点; 文章目录PBR流程渲染管线细分着色器的底层实现,应用原理常见的色调映射算法openGl和Direct X的区别PBR流程和URP渲染管线Camera loop(剔除)MVP矩阵变换光线追踪前向渲染和延迟渲染shader和材质的区别bloom原理后处理的理解高斯模糊实现原理图像处理中的边缘检测算子 PBR流程 小结:一套基于自然界微平面理论、能量守恒、菲涅尔反射、线性空间等的科学理论所实现的基于物理的渲染系统,包含一

小谁的博客 1157

MySQL的主从复制和读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

weixin_58376680的博客 2177

THB6128步进电机驱动芯片介绍

THB6128芯片也称为步进电机驱动芯片,采用BiCDMOS工艺,IC管脚间距为1mm的小型MFP30KR封装而成。

weichen_78的博客 7173

COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧)

本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。

weixin_29284657的博客 415

MySQL主从复制与读写分离

1)创建 Mycat2工作所必须的账号启动 Mycat2 服务,需要有真实的数据库服务器支撑才能运行,因此,需要在 MySQL 服务器(其它被 Mycat2 支持的数据库也如此)创建账号并给账号授权,然后在 Mycat2 所在的宿主系统用 MySQL,客户端用创建好的账号远程进行连接,验证账号的有效性和正确性。不过,无论是哪种存储方式,在最终用户看,MyCAT里都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。

king05yh的博客 2517

基于STM32与FPGA Cyclone IV的FSMC高速数据通信实战解析

本文详细解析了基于STM32的FSMC接口与FPGA Cyclone IV实现高速并行数据通信的实战方案。通过将FPGA模拟为SRAM设备,构建了MCU与FPGA之间的高速数据通道,并深入探讨了硬件连接、STM32软件配置、FPGA逻辑设计及性能优化等关键步骤,为图像处理、高速采集等需要大数据量交换的嵌入式应用提供了稳定高效的通信解决方案。

swift5iosmith的博客 289

MySQL主从复制及读写分离

MySQL主从复制及读写分离一、相关概述(一)MySQL 支持的复制类型(二)MySQL主从复制的工作过程1.Master 服务器保存记录到二进制日志2.Slave 服务器复制 Master 服务器的日志3.Slave 服务器重放复制过来的日志二、读写分离(1)读写分离的概念(2)读写分离的作用(3)MySQL 读写分离原理(4)常见的 MySQL 读写分离1)基于程序代码内部实现2)基于中间代理层实现三、MySQL主从复制和读写分离实验部署(1)主从复制实验步骤及准备1.关闭防火墙及安全机制2.安装时间同

weixin_53567573的博客 2375

Android Framework 开发工程师职位深度解析与面试指南

摘要:博泰车联网科技(上海)股份有限公司招聘Android Framework开发工程师,负责车载系统的底层开发与优化。岗位要求5年以上经验,深入掌握Android Framework机制(WindowManager、PowerManager等模块),熟悉高通平台中间件架构及NDK/JNI开发,具备性能优化(启动时间、ANR处理)、OTA升级等能力。需熟练使用Android Studio、Git等工具,有车载开发经验者优先。工作内容包括Framework定制开发、问题排查及技术文档编写。

郑伟强dev的专栏 540

Q3D提取PCB走线RLCG参数

介绍一种提取PCB走线寄生电容和寄生电感的方法

sinat_15150363的博客 2896

Mysql主从复制和读写分离

数据库写入效率要低于读取效率,一般系统中数据读取频率高于写入频率,单个数据库实例在写入的时候会影响读取性能,这是做读写分离的原因。

YLXCA的博客 1053

FC7300 SPI MCAL配置引导

Example - QMI8A01z外设:Example - QMI8A01z外设:

舊梦的博客 252

MySQL主从复制与读写分离( 主从复制原理 、读写分离原理 、配置 MySQL 主从复制 、配置 MySQL 读写分离)

文章目录

kimowinter的博客 5539

2025.06.06【Ribo-seq】|riboWaltz:P-site定位与三碱基周期性分析流程

同学们,大家好!今天我们要学习的是riboWaltz——一款专为Ribo-seq(核糖体足迹测序)数据设计的R包,主要用于P-site定位优化和三碱基周期性分析。P-site的准确定位是Ribo-seq下游所有翻译组学分析的基础,riboWaltz为我们提供了系统、可视化、易用的解决方案。P-site定位优化:自动识别不同长度RPF的最佳P-site偏移量。三碱基周期性分析:可视化RPF在CDS、UTR等区域的分布,评估数据质量。多样本/多条件支持:可同时处理多个样本,便于批量分析和对比。

1784

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MySQL 主从复制和读写分离

MySQL 主从复制和读写分离

weixin_68840588的博客 1297

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL 主从复制与读写分离

MySQL 主从复制是一种数据同步机制,允许数据从一个主数据库(Master)复制到一个或多个从数据库(Slave)。数据冗余与灾备:通过从库提供数据备份,增强容灾能力。负载均衡:将读操作分散到多个从库,减轻主库压力。高可用性:主库故障时,从库可快速切换为主库,减少停机时间。MySQL 读写分离是一种通过分离读操作(SELECT)与写操作(INSERT/UPDATE/DELETE)的数据库架构设计,将写操作集中在主库(Master),读操作分散到从库(Slave),以提升系统性能和并发处理能力。核心作用。

2301_80839375的博客 1759

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: MySQL存储引擎 INNODB和MYISAM
下一篇: LVS负载均衡群集
anbesrt
博客等级 码龄4年 698粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值