MySQL5.5半同步复制

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

 在保证数据库性能的前提下,怎么保证数据的一致性呢?

       在MySQL 5.5版本中即支持异步复制又支持半同步复制。

       1、当slave 连接master的时候,它会指出它是否支持半同步复制。

       2、当master启用 semisynchronous replication.并且至少有一台slave也启用了该功能,master端的事务会被阻塞,并且等到该事务会等待其中任何一个slave接受到该事务,或者超过等待时间才会提交。

       3slave端回复给 master的信息依据是 slave事务已经写入到 relay-log并且已经刷写到了磁盘。
       4、如果 master端等待超时的话,没有任何 slave给出该事务已经写入 relay-log的信息,那么他会自动转到异步复制,当其中一个支持异步复制的 slave追赶上了 master,那么 master会进入到半同步复制状态。
       5、半同步复制必须是两端都支持。

      当master的线程处于被阻塞(等待slave端返回的消息时),并不会给该会话session返回任何消息。当阻塞结束的时候,master会返回给该session消息。

      如果一个事务中包含对非事务表的修改,在发生 rollback的情况下, master也是会这些信息写入到 binlog上面,并且也会发生阻塞,等待 slave端写入。

      半同步复制需要在数据一致性和性能上作出权衡。

       5.5半同步功能的安装步骤

        1、这个首先需要5.5支持动态加载模块:查看变量: have_dynamic_loading是否是yes;

        2、基本的复制架构已经搭建

        3、master端和slave端的模块是随着版本发布的,在master端执行:

        INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

    在slave端执行:

    INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

    如果在安装的时候出现如下错误,请下载缺失的组件:http://dev.mysql.com/downloads/os-linux.html.

        ERROR 1126 (HY000): Can't open shared library
'/usr/local/mysql/lib/plugin/semisync_master.so' (errno: 22 libimf.so: cannot open
shared object file: No such file or directory)
         安装完成后,还需要设置变量才能正常启动:

         SET GLOBAL rpl_semi_sync_master_enabled =1;

     SET GLOBAL rpl_semi_sync_master_timeout =N 设置好超时时间,默认是10s (有点长啦)

          在slave 端执行:

          SET GLOBAL rpl_semi_sync_slave_enabled =1

     (以上信息都可以写到my.cnf文件中)

     这个时候复制还是属于异步复制,只有重启slave或者 重启 slave I/O线程,才能真正使用半同步复制功能。

     stop slave io_thread;start slave io_thread;

           监控半同步复制状态;

          几个重要的变量是:

          rpl_semi_sync_master_clients  支持和已经注册半同步复制的已连接的slave数量。

          rpl_semi_sync_master_status  Master的半同步复制状态,1是活动状态,0表示非活动,要么是没有启用该功能,要么以切换至异步复制状态

         rpl_semi_sync_slave_status Slave 上的半同步复制状态,1,表示已经启用而且I/O线程正在运行,0表示非活动状态。

使用半同步复制需要思考的几个问题:

1、当所有的slave崩溃,半同步复制的状态如何变化?

为防止半同步复制在没有收到确认的情况下发生阻塞,使用rpl-semi-sync-mastertimeout=millseconds(毫秒) 设置一个超时时间,在规定时间内master没有收到任何slave的回应,那么复制将装变为异步复制。注意事项:该选项在server重启之后不会保存,所以可以考虑写入到my.cnf中。

2、当master产生新的事件,此时没有slave与之保持连接,这个时候master该如何变化?

默认情况下,和1上面所说的一样,有一个超时时间,。为了更高效的进行复制,我们可以设置 rpl-semi-sync-master-wait-no-slave=on|off ,来关闭默认的行为,直接转变为异步复制

3、对于比较繁忙的master,如何在master出现故障时,保持数据主从的一致性?对于出现partial transaction的情况,可以利用第三方自动截取部分 roll back 字段。具体参考:http://www.woqutech.com/files/Partial_Transaction.pdf

 

       






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/974866,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11月前
|
监控 关系型数据库 MySQL
|
SQL 缓存 容灾
MySQL 主从,6 分钟带你掌握!
大家好,我是楼仔! MySQL 主从一直是面试常客,里面的知识点虽然基础,但是能回答全的同学不多。 比如我之前面试小米,就被问到过主从复制的原理,以及主从延迟的解决方案,你之前面试,有遇到过哪些 MySQL 主从的问题呢?
209 0
MySQL 主从,6 分钟带你掌握!
|
监控 MySQL 关系型数据库
mysql的主从复制和半同步复制
mysql的主从复制和半同步复制 一.主从复制 MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
1500 0
|
关系型数据库 数据库
|
关系型数据库 MySQL
|
监控 关系型数据库 MySQL
|
监控 关系型数据库 MySQL
|
SQL 监控 关系型数据库
|
关系型数据库 MySQL 数据库
|
MySQL 关系型数据库 数据库