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

数据库管理与高可用-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)

相关文章:

  • linux 内存分析
  • Python绘图库及图像类型之特殊领域可视化
  • Git 切换到旧提交,同时保证当前修改不丢失
  • Qt客户端技巧 -- 窗口美化 -- 窗口阴影
  • Truffle 和 Ganache 使用指南
  • 龙石数据中台V3.5.1升级 | 数据实时收集来了!
  • 使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHub Pages中
  • 从入门到进阶:Python 学习参考书的深度解析
  • 全面理解 Linux 内核性能问题:分类、实战与调优策略
  • MySQL基本操作
  • 山洪径流过程及洪水淹没数值模拟
  • [Java恶补day17] 41. 缺失的第一个正数
  • Meta Prompting 完整指南
  • 1.3 编译程序:单个C文件和多个C文件
  • 编译构建C++程序时ABI一致性问题
  • Java设计模式之状态模式详解
  • Unity基础-数学向量
  • NY118NY120美光固态闪存NY124NY129
  • 高股息打底+政策催化增强+永续经营兜底
  • 每日算法 -【Swift 算法】电话号码字母组合
  • 网站建设分析/选择一个产品做营销方案
  • 佛山知名网站建设公司/哪个浏览器看黄页最快夸克浏览器
  • 做视频网站广告收费/武汉seo排名优化
  • 潍坊市网站建设/长沙网站排名推广
  • 怎么做猫的静态网站/网站优化推广外包
  • 怎么把网站建设推广出去/阿里云搜索