当前位置: 首页 > ai >正文

数据库管理与高可用-MySQL主从复制与读写分离

目录

#1.1MySQL主从复制原理

  1.1.1MySQL支持的复制类型

  1.1.2复制的工作过程

#2.1MySQL读写分离原理

  2.1.1常见的MySQL读写分离为为两种

#3.1主从复制+读写分离的实验案例


1.1MySQL主从复制的原理

        MySQL 主从复制是一种常用的数据同步机制,用于将主数据库(Master)的数据变更同步到一个或多个从数据库(Slave),实现数据冗余、读写分离和高可用性。 

 1.1.1MySQL支持的复制类型

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

    2.基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

    3.混合类型的复制:默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

 1.1.2复制的工作过程

  1. 在每个事务更新数据完成之前,Master 将这些改变记录进二进制日志。写入二进制日志完成后,Master 通知存储引擎提交事务。

  2.  Slave 将 Master 的 Binary log 复制到其中继日志(Relay log)。首先,Slave 开始一个工作线程 ——I/O 线程,I/O 线程在 Master 上打开一个普通的连接,然后开始 Binlog dump process。Binlog dump process 从 Master 的二进制日志中读取事件,如果已经跟上 Master,它会睡眠并等待 Master 产生新的事件。I/O 线程将这些事件写入中继日志。

    3. SQL slave thread(SQL 从线程)处理该过程的最后一步。SQL 线程从中继日志读取事件,并重放其中的事件而更新 Slave 数据,使其与 Master 中的数据保持一致。只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 的缓存中,所以中继日志的开销很小。复制过程有一个很重要的限制,即复制在 Slave 上是串行化的,也就是说 Master 上的并行更新操作不能在 Slave 上并行操作。

2.1MySQL读写分离原理

  MySQL 读写分离是优化数据库负载、提升系统性能与可用性的常用方案,核心围绕 “分离读写压力,利用主从复制保障数据一致”。

 2.1.1常见的MySQL读写分离分为两种  

   (1)基于程序代码内部实现
     在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支;缺点是需要开发人员来实现,运维人员无从下手。

   (2)基于中间代理层实现
      代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有两个代表性程序。

3.1主从复制+读写分离的实验案例

配置Master主服务器

1.vim /etc/my.cnf

log-bin=/usr/local/mysql/data/mysql-bin

binlog_format = MIXED

server-id=1

2.重启MySQL服务

3.登录MySQL程序,给从服务器授权

 配置Slave从服务器

  1.slave1,slave2上的server-id不能一致,slave1为server-id=2,而slave2为server-id=3,在vim /etc/my.cnf中配置。

  2.重启mysqld服务

  3.登录mysqld,配置同步

  4.验证主从复制效果

 搭建MySQL读写分离

  安装Mycat2

   安装并配置mycat软件

   创建Mycat2工作所必须得账号

   启动Mycat2

   第一步:Mycat增加数据源

 查看数据源信息

   第二步:创建Mycat集群

   查看并修改集群配置

   修改负载均衡的默认策略为轮询

   修改配置后需要重启mycat 

   登录mycat集群,创建测试库和测试表

  停止slave1和slave2的主从同步

    slave1:

[root@localhost ~]# mysql -uroot -p
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

   slave2:

[root@localhost ~]# mysql -uroot -p
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

  在master和slave1,slave2创建测试数据

      Master 上操作:

mysql> use test;
Database changed
mysql> insert into test.zang values ('1','zhang','this_is_master');
Query OK, 1 row affected (0.01 sec)

     slave1上操作:

mysql> use test;
Database changed
mysql> insert into test.zang values ('2','zhang','this_is_slave1');
Query OK, 1 row affected (0.01 sec)

     slave2上操作:

mysql> use test;
Database changed
mysql> insert into test.zang values ('3','zhang','this_is_slave2');
Query OK, 1 row affected (0.01 sec)

   登录mycat集群,查询tets.zang的数据

[root@localhost ~]# mysql -uroot -p123456 -P8066 -h192.168.10.101
mysql> select * from test.zang; 
+----+-------+----------------+
| id | name  | address        |
+----+-------+----------------+
|  2 | zhang | this_is_slave1 |
+----+-------+----------------+
1 row in set (0.01 sec)mysql> select * from test.zang; #第二次查询
+----+-------+----------------+
| id | name  | address        |
+----+-------+----------------+
|  3 | zhang | this_is_slave2 |
+----+-------+----------------+
1 row in set (0.01 sec)
mysql> select * from test.zang;  
+----+-------+----------------+
| id | name  | address        |
+----+-------+----------------+
|  2 | zhang | this_is_slave1 |
+----+-------+----------------+
1 row in set (0.01 sec)[root@localhost ~]# mysql -uroot -p123456 -P8066 -h192.168.10.101
MySQL [(none)]>insert into zang values('4','zhang','write_test');
Query OK, 1 row affected (0.08 sec)
http://www.xdnf.cn/news/12272.html

相关文章:

  • Redux 实践与中间件应用
  • 分布式Session处理的五大主流方案解析
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(八):异步处理逻辑详解
  • Copilot for Xcode (iOS的 AI辅助编程)
  • ubuntu 22 安装milvus
  • 【QT面试题】(二)
  • RocketMQ入门5.3.2版本(基于java、SpringBoot操作)
  • 构建 MCP 服务器:第 2 部分 — 使用资源模板扩展资源
  • Unity基于GraphView的可视化关卡编辑器开发指南
  • Playwright 测试框架 - .NET
  • 智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
  • Oracle 用户名大小写控制
  • 若依添加添加监听容器配置(删除键,键过期)
  • 关于事务的简介
  • Ubuntu系统下交叉编译cJSON
  • IDEA运行Tomcat出现乱码问题解决汇总
  • 三种读写传统xls格式文件开源库libxls、xlslib、BasicExcel的比较
  • c++ chrono头文件含义
  • Ubuntu系统配置C++的boost库(含filesystem模块)的方法
  • 前缀和题目:逐步求和得到正数的最小值
  • Vue事件总线
  • MyBatis 查询功能实现全流程
  • 《操盘实战》速读笔记
  • 使用Hutool工具进行rsa加密解密示例:
  • Linux进程替换以及exec六大函数运用
  • 【电赛培训课】测量与信号类赛题分析
  • Power Apps:自动发送运行错误邮件
  • 图着色问题(回溯)
  • Redux:不可变数据与纯函数的艺术
  • Windows和Ubuntu双系统,删除Windows