使用读写分离和主从复制功能应对繁忙业务

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【6月更文挑战第11天】该文介绍了MySQL的读写分离和主从复制机制,强调了二进制日志在数据恢复、主从同步和审计中的关键作用。作者提醒,binlog_format的改动只影响非复制更新,且应确保版本兼容性,以免影响副本运行。

1 读写分离和主从复制

大型应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步
到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。

mandala曼德罗符号.png

为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。

2 使用和配置二进制日志

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录。常见的binlog有如下的常见作用。

数据恢复:delete没加where条件? binlog可以帮你恢复数据; 

主从同步:搭建一套一主两从的MySQL集群,binlog帮你完成主从的数据同步。 

审计:通过分析binlog可以排查是否存在SQL注入攻击。

值得注意的是,mysql数据库虽然与MariaDB有很深的渊源,但是binlog处理方式有较大的不同,
影响 mysql 数据库的语句可以与预期不同的方式记录。

如果直接编辑 mysql 数据库,则根据binlog_format按预期执行日志记录。
直接编辑 mysql 数据库的语句包括插入、更新、删除、替换、执行、加载数据文件、选择和截取表。

如果间接编辑 mysql 数据库,则无论设置binlog_format,都会使用语句日志记录。
编辑 mysql 数据库的语句间接包括 GRANT、REVOKE、SET PASSWORD、RENAME USER、ALTER、DROP 和 CREATE(下面描述的情况除外)。

创建表SELECT 可以使用日志记录格式的组合。语句的 CREATE TABLE 部分使用基于语句的日志记录进行记录,而 SELECT 部分根据 binlog_format 的值进行记录。

3 主从复制三个模式

(1)全同步复制

是指主库在执行完一个事务后,会等待所有从库执行完该事务后,才会将结果返回给客户端。这种方式的优点是数据一致性较高,但因为需要等待所有从库执行完事务,所以性能可能会较低。

(2)异步复制

则是主库在执行完客户端提交的事务后,会立即将结果返回给客户端,而不关心从库是否已经接收并处理。这种方式简单且性能较好,但可能会导致主从之间数据不一致的概率较大。

(3)半同步复制

则介于同步复制和异步复制之间,主库在执行完客户端提交的事务后,会等待至少一个从库接收到并写入中继日志后,才会将结果返回给客户端。这种方式牺牲了一定的性能,但提高了数据的安全性。

binlog用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。

binlog是mysql的逻辑日志,并且由Server层进行记录,使用任何存储引擎的mysql数据库都会记录binlog日志。

这三个模式(binlog)如下:

    基于SQL的语句复制
    基于行的复制
    混合复制

binlog的日志复制类型可以分为

第一个基于语句的复制,这是mysql的默认方式,在主服务器执行语句,从服务器执行相同的语句。

​第二个是基于行的复制,把改变的内容复制到从服务器。

​第三是混合类型的复制,一旦发现基于语句无法精确复制,则采用基于行的复制。

4 配置方式

设置日志保存方式需要管理员权限,例如设置全局日志模式的方式如下:

SET GLOBAL binlog_format='ROW';

设置当前的会话的日志模式方式如下:

SET SESSION binlog_format='ROW';

也可以在数据库配置文件中设置

binlog_format=ROW

当服务器是副本并启用了行复制时,请小心动态更改二进制日志格式。
如果动态更改全局值,则不会影响任何当前正在运行的会话设置。

这可能会导致行复制出现问题,因为即使在执行 STOP SLAVE之后,
工作线程仍将保持运行状态。
这可以通过重置slave_parallel_threads系统变量来解决。例如:

STOP SLAVE;
SET GLOBAL slave_parallel_threads=0;
SET GLOBAL binlog_format='ROW';
SET GLOBAL slave_parallel_threads=4;
START SLAVE

5 小结 二进制日志格式对副本的影响

虽然数据库可以使用二进制日志得到一些可靠性保证,其副作用包括对其他运行副本的影响。

副本将应用从主数据库获取的任何事件,而不考虑二进制日志格式。
binlog_format系统变量仅适用于正常(未复制)更新。

如果运行的是 MySQL 或早于 10.0.22 的 MariaDB,
如果在 binlog_format=STATEMENT 模式下运行副本,则如果主副本与 binlog_format 设置为 STATEMENT 以外的任何内容一起使用,则副本将停止。

二进制日志格式向上兼容。这意味着,如果副本与主副本相同或版本更新,则复制应始终有效。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
2月前
|
容灾 测试技术 数据库
怎么保证后端服务稳定性,怎么做容灾
【10月更文挑战第28天】保证后端服务稳定性及做好容灾措施是一个系统工程,需要从多个方面进行考虑和实施
|
6月前
|
消息中间件 缓存 监控
如何设计一个秒杀系统,(高并发高可用分布式集群)
【7月更文挑战第4天】设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。
163 1
|
6月前
|
消息中间件 存储 缓存
高并发架构设计三大利器:缓存、限流和降级问题之在数据库层面确保缓存一致性问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之在数据库层面确保缓存一致性问题如何解决
|
7月前
|
消息中间件 SQL 关系型数据库
数据库如何实现读写分离以应对高并发?
【6月更文挑战第17天】数据库如何实现读写分离以应对高并发?
95 1
|
8月前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
|
定位技术 网络架构 UED
主从副本架构可能存在风险
主从副本架构可能存在风险
158 0
|
SQL 缓存 算法
主从不一致解决方案 && 如何降低主从延迟
主从不一致解决方案 && 如何降低主从延迟
主从不一致解决方案 && 如何降低主从延迟
|
缓存 监控 网络协议
并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表
并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表
113 0
|
存储 缓存 运维
大厂都是如何对高并发系统做到高可用的?
系统具备较高的无故障运行的能力。 Hadoop1.0的NameNode是单点,一旦故障,整个集群不可用。Hadoop2提出的NameNode HA方案就是同时启动两个NameNode:
132 0