mysql的半同步复制:
一、测试环境:
两台redhat linux5.8虚拟机;
Master:
IP地址:172.16.77.77
MySQL版本:5.5.28
操作系统:RHEL5.8

Slave:
IP地址:172.16.12.7
MySQL版本:5.5.28
操作系统:RHEL5.8;
二、准备工作
1、编译安装mysql,指定数据路径为/data/mydata;用户为mysql(路径和用户都需另行创建);
2、为mysql提供服务脚本,配置文件等等,修改/data/mydata的属主属组为mysql用户(步骤略);
3、分别在两台主机上执行如下命令:
 #hwclock -s
 同步主机的时间
三、mysql半同步复制的概述 
 所谓半同步复制,即给主服务器设定等待从服务器来同步的有效时长,在有效时长内主服务器将等待从服务器同步复制数据;若超出时长,主服务器将不再等待从服务
器同步复制数据,从而切换为异步复制数据。
 
四、设置半同步复制步骤:
1、这里只用一台从服务器,主从配置的设定按照之前配置的主从复制设置过程即可(此处略),要设置mysql的半同步复制,还需安装两个模块:

  1. # cd /usr/local/mysql/lib/
  2. # ls
  3. libmysqlclient.a libmysqlclient_r.so.18 libmysqlclient.so.18 libmysqld-debug.a plugin
  4. libmysqlclient_r.a libmysqlclient_r.so.18.0.0 libmysqlclient.so.18.0.0 libmysqlservices.a
  5. libmysqlclient_r.so libmysqlclient.so libmysqld.a libtcmalloc_minimal.so
  6. # cd plugin/
  7. # ls
  8. adt_null.so auth_test_plugin.so libdaemon_example.so qa_auth_interface.so semisync_slave.so
  9. auth.so daemon_example.ini mypluglib.so qa_auth_server.so
  10. auth_socket.so debug qa_auth_client.so semisync_master.so

如上所示:在mysql的安装目录下/lib/plugin下有两个模块:semisync_master.so  semisync_slave.so;前者是需要安装在主服务器上的,后者安装在从服务器上,安装了这两个模块后,才能对mysql进行半同步复制。

2、主服务器上

  1. mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
  2. mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
  3. +------------------------------------+-------+
  4. | Variable_name | Value |
  5. +------------------------------------+-------+
  6. | rpl_semi_sync_master_enabled | OFF |
  7. | rpl_semi_sync_master_timeout | 10000 |
  8. | rpl_semi_sync_master_trace_level | 32 |
  9. | rpl_semi_sync_master_wait_no_slave | ON |
  10. +------------------------------------+-------+
  11. 4 rows in set (0.01 sec)
  12. ################
  13. 查看安装semisync_master.so模块后生成的系统参数:
  14. rpl_semi_sync_master_enabled:是否开启主服务器上的半同步复制
  15. rpl_semi_sync_master_timeout:半同步复制的有效时长,单位为毫秒
  16. rpl_semi_sync_master_trace_level:传输级别
  17. rpl_semi_sync_master_wait_no_slave:当主服务器没有发现有从服务器在线时,是否依旧按照设定的时长等待从服务器
  18. ################
  19. mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
  20. mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;
  21. mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
  22. +------------------------------------+-------+
  23. | Variable_name | Value |
  24. +------------------------------------+-------+
  25. | rpl_semi_sync_master_enabled | ON |
  26. | rpl_semi_sync_master_timeout | 1000 |
  27. | rpl_semi_sync_master_trace_level | 32 |
  28. | rpl_semi_sync_master_wait_no_slave | ON |
  29. +------------------------------------+-------+
  30. 4 rows in set (0.01 sec)
  31. ################
  32. 开启主服务器上的半同步复制功能;并将超时时长设置为1000毫秒
  33. ################
  34. mysql> SHOW GLOBAL STATUS LIKE '%semi%';
  35. +--------------------------------------------+-------+
  36. | Variable_name | Value |
  37. +--------------------------------------------+-------+
  38. | Rpl_semi_sync_master_clients | 0 |
  39. | Rpl_semi_sync_master_net_avg_wait_time | 0 |
  40. | Rpl_semi_sync_master_net_wait_time | 0 |
  41. | Rpl_semi_sync_master_net_waits | 0 |
  42. | Rpl_semi_sync_master_no_times | 0 |
  43. | Rpl_semi_sync_master_no_tx | 0 |
  44. | Rpl_semi_sync_master_status | ON |
  45. | Rpl_semi_sync_master_timefunc_failures | 0 |
  46. | Rpl_semi_sync_master_tx_avg_wait_time | 0 |
  47. | Rpl_semi_sync_master_tx_wait_time | 0 |
  48. | Rpl_semi_sync_master_tx_waits | 0 |
  49. | Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
  50. | Rpl_semi_sync_master_wait_sessions | 0 |
  51. | Rpl_semi_sync_master_yes_tx | 0 |
  52. +--------------------------------------------+-------+
  53. 14 rows in set (0.00 sec)
  54. ################
  55. 在从服务器没有开启前主服务器半同步复制的变量状态:
  56. Rpl_semi_sync_master_clients:半同步复制中从服务器的在线个数
  57. Rpl_semi_sync_master_status :主服务器的半同步复制状态
  58. ################
  59. 3、从服务器上
  60. mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  61. mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
  62. +---------------------------------+-------+
  63. | Variable_name | Value |
  64. +---------------------------------+-------+
  65. | rpl_semi_sync_slave_enabled | OFF |
  66. | rpl_semi_sync_slave_trace_level | 32 |
  67. +---------------------------------+-------+
  68. 2 rows in set (0.00 sec)
  69. mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';
  70. +----------------------------+-------+
  71. | Variable_name | Value |
  72. +----------------------------+-------+
  73. | Rpl_semi_sync_slave_status | OFF |
  74. +----------------------------+-------+
  75. 1 row in set (0.00 sec)
  76. #################
  77. 从服务器上安装模块后的参数:
  78. rpl_semi_sync_slave_enabled:是否开启从服务器上半同步复制
  79. rpl_semi_sync_slave_trace_level:传输级别
  80. 变量状态:
  81. Rpl_semi_sync_slave_status:从服务器上半同步复制的状态
  82. #################
  83. mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
  84. Query OK, 0 rows affected (0.01 sec)
  85. mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
  86. Query OK, 0 rows affected (0.02 sec)
  87. Query OK, 0 rows affected (0.01 sec)
  88. mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
  89. +---------------------------------+-------+
  90. | Variable_name | Value |
  91. +---------------------------------+-------+
  92. | rpl_semi_sync_slave_enabled | ON |
  93. | rpl_semi_sync_slave_trace_level | 32 |
  94. +---------------------------------+-------+
  95. 2 rows in set (0.00 sec)
  96. mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';
  97. +----------------------------+-------+
  98. | Variable_name | Value |
  99. +----------------------------+-------+
  100. | Rpl_semi_sync_slave_status | ON |
  101. +----------------------------+-------+
  102. 1 row in set (0.01 sec)
  103. ###开启从服务器半同步复制,并开启slave上的io_thread线程###

五、测试半同步复制
a、所有参数已配置完成,从服务器的半同步复制已开启,在主服务器查看链接状态:

  1. mysql> SHOW GLOBAL STATUS LIKE '%semi%';
  2. +--------------------------------------------+-------+
  3. | Variable_name | Value |
  4. +--------------------------------------------+-------+
  5. | Rpl_semi_sync_master_clients | 1 |
  6. | Rpl_semi_sync_master_net_avg_wait_time | 0 |
  7. | Rpl_semi_sync_master_net_wait_time | 0 |
  8. | Rpl_semi_sync_master_net_waits | 0 |
  9. | Rpl_semi_sync_master_no_times | 0 |
  10. | Rpl_semi_sync_master_no_tx | 0 |
  11. | Rpl_semi_sync_master_status | ON |
  12. | Rpl_semi_sync_master_timefunc_failures | 0 |
  13. | Rpl_semi_sync_master_tx_avg_wait_time | 0 |
  14. | Rpl_semi_sync_master_tx_wait_time | 0 |
  15. | Rpl_semi_sync_master_tx_waits | 0 |
  16. | Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
  17. | Rpl_semi_sync_master_wait_sessions | 0 |
  18. | Rpl_semi_sync_master_yes_tx | 0 |
  19. +--------------------------------------------+-------+
  20. 14 rows in set (0.00 sec)
  21. ###Clients的连接数已更改为1,从服务器连接正常###

b、在主服务器上之前创建的sumoan表中插入数据:

  1. mysql> insert into sumoan values (1,'fuyaxu');insert into sumoan values (2,'weiyang');
  2. Query OK, 1 row affected (0.01 sec)
  3. Query OK, 1 row affected (0.01 sec)
  4. mysql> select *from sumoan;
  5. +----+---------+
  6. | id | name |
  7. +----+---------+
  8. | 1 | fuyaxu |
  9. | 2 | weiyang |
  10. +----+---------+
  11. 2 rows in set (0.00 sec)
  12. ###数据已完成插入,查看主服务器上半同步复制的状态信息###
  13. mysql> SHOW GLOBAL STATUS LIKE '%semi%';
  14. +--------------------------------------------+-------+
  15. | Variable_name | Value |
  16. +--------------------------------------------+-------+
  17. | Rpl_semi_sync_master_clients | 1 |
  18. | Rpl_semi_sync_master_net_avg_wait_time | 1673 |
  19. | Rpl_semi_sync_master_net_wait_time | 3347 |
  20. | Rpl_semi_sync_master_net_waits | 2 |
  21. | Rpl_semi_sync_master_no_times | 0 |
  22. | Rpl_semi_sync_master_no_tx | 0 |
  23. | Rpl_semi_sync_master_status | ON |
  24. | Rpl_semi_sync_master_timefunc_failures | 0 |
  25. | Rpl_semi_sync_master_tx_avg_wait_time | 786 |
  26. | Rpl_semi_sync_master_tx_wait_time | 1572 |
  27. | Rpl_semi_sync_master_tx_waits | 2 |
  28. | Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
  29. | Rpl_semi_sync_master_wait_sessions | 0 |
  30. | Rpl_semi_sync_master_yes_tx | 2 |
  31. +--------------------------------------------+-------+
  32. 14 rows in set (0.00 sec)

c、在从服务器上查看是否已同步到数据;

  1. mysql> show tables;
  2. +----------------+
  3. | Tables_in_test |
  4. +----------------+
  5. | fuyaxu |
  6. | moziyan |
  7. | sumoan |
  8. +----------------+
  9. 3 rows in set (0.00 sec)
  10. mysql> select *from sumoan;
  11. +----+---------+
  12. | id | name |
  13. +----+---------+
  14. | 1 | fuyaxu |
  15. | 2 | weiyang |
  16. +----+---------+
  17. 2 rows in set (0.00 sec)
  18. ###同步数据成功###

转载于:https://blog.51cto.com/7linux/1079736

mysql的半同步复制相关推荐

  1. MySQL性能半同步复制VS异步复制

    性能测试报告 •从当前性能测试来看其实半同步复制与异步复制差距并不大,只是略微有点差距 •都说半同步复制比异步复制性能慢了好多,为什么当前测试却差距这么小呢? 原因一:半同步复制时只有一个slave库 ...

  2. MySQL数据库半同步复制

    半同步复制,是有一个从节点或者一部分从节点与主节点之间是同步复制的,其他的从节点仍是异步复制 半同步复制是谷歌公司贡献给MySQL的一个插件,默认在MySQL中没有此插件,所以要实现主从的版同步复制需 ...

  3. Mysql之半同步复制

    一.半同步复制介绍 1.半同步复制简介   Mysql数据库复制默认的方式是异步复制,但异步复制的不足之处是主库把event写入二进制日志后,并不知道从库是否已经接受并应有了.在异步模式下,如果主库崩 ...

  4. 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  5. 简述mysql半同步复制—semisync

    mysql的半同步复制-semisync是基于默认的异步复制和完全同步复制之间,它是在master在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个slave收到并写到relay log ...

  6. Java mysql同步复制_MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.mysql数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  7. sync是同步还是非同步_MySQL半同步复制你可能没有注意的点

    目录 问题 关于半同步复制 代码层面解释上面几个问题 1 问题 对于MySQL半同步复制,了解MySQL的人,都肯定能说出一二,比如和异步复制.同步复制的差别.超时退化为异步复制和无损复制等,但是这面 ...

  8. mysql5.6semi plugin_mysql5.6 semi replication 半同步复制配置(示例代码)

    --###半同步配置 --1.插件位置 mysql> show variables like 'plugin_dir' -> ; +---------------+------------ ...

  9. mysql 半同步复制_Mysql半同步复制原理及问题排查

    mysql半同步复制和异步复制的差别如上述架构图所示:在mysql异步复制的情况下,Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master ...

最新文章

  1. Matlab计时函数使用
  2. 服务器2003添加共享文档权限,Windows2003使用命令行设置共享权限与安全权限心得...
  3. keil5图标变成白色_keil5菜单栏图标错乱怎么办? keil5菜单栏快捷图标错位的解决办法...
  4. Android edittext限制字节数
  5. OpenResty-Nginx安装目录介绍
  6. ZJUT 地下迷宫 (高斯求期望)
  7. WORD样式保存为主题集?
  8. SSH实现进销存(ERP)项目之订单管理模块解析(附源码地址)
  9. Python——腾讯笔试编程题(函数练习)
  10. OneNET物联网云平台HTTP数据流上传与下发,使用Fiddler调试开关应用,stm32 esp8266物联网家居远程开关
  11. 异常处理--“System.BadImageFormatException”类型的未经处理的异常在 DataTest.exe 中发生
  12. Linux初级入门百篇-​LVM 简介
  13. 数据结构与算法(java)
  14. 林軒田《机器学习基石》课程总结
  15. xp系统链接不上宽带连接服务器地址,怎么样解决xp电脑宽带连接不见了
  16. R语言学习记录:unique()函数
  17. 3.模板模式_1:什么是模板模式???什么情况适合用模板模式???模板模式如何实现???
  18. 一字节BCD码转ASCII码的算法及源码
  19. java方法的重载和方法的重写的区别
  20. 【POJ3093】Margaritas on the River Walk【01背包变种】

热门文章

  1. 苹果紧急修复已遭利用的0day
  2. shell入门(一)
  3. git pull出现错误的解决办法
  4. 系统安装无法找寻硬盘!!!【全系列】
  5. MySQL锁系列3 MDL锁
  6. JavaScript 中 2个等号(==)和 3个等号(===)之间的区别
  7. WaterfallTree(瀑布树) 详细技术分析系列
  8. Ubuntu Make新版上线:支持安装Swift编程语言
  9. sqlite 交叉编译-转
  10. mysql5.5默认引擎_InnoDB 作为默认存储引擎(从mysql-5.5.5开始)