msyql 的半同步复制


mysql的半同步复制:mysql的异步复制:mysql默认使用异步方式进行同步,master在执行客户端提交的事务后会将结果返回给客户端,表示客户端的操作已经生效,同时会将该操作的binlog通过dumper通知slave来取,再正常情况下,slave会将该binlog写入本地,并通过sql语句写入从库中与主库同步数据master对从库是否写入不负任何责任。主和从的复制过程是由三个线程参与完成的,其中有两个线程(sql语句和I/O线程在slave端),一个I/O线程在master端。mysql的同步复制:这是一个偏执狂,客户端向主库提交数据,主库写入数据只有从库将数据写入本地后,返回给主库一个回执,主库向客户端返回消息,表示已经成功受理该任务。mysql半同步:在masterdumper线程通知salve,同时增加了一个ackmysql5.7支持在事务提交前等待ack,当slave没有返回给masterack时,将会自动降级为异步复制。半同步通过rpl_semi_sync_master_wait_point参数来控制半同步下,master事务提交前的方式mysql中的半同步参数after_sync,master将每个事务写入binlog传递到slave刷新到磁盘relaylogmaster等待slave反馈接收到的ack后在提交事务并返回提交成功给客户端。半同步的部署:半同步基于mysql的异步复制,所以要先搭建好环境。环境搭建参考我的博客:http://12237658.blog.51cto.com/12227658/1907018测试主:master安装半同步插件:mysql>INSTALLPLUGINrpl_semi_sync_masterSONAME’semisync_master.so’;QueryOK,0rowsaffected(0.08sec)查看插件是否安装成功:mysql>showplugins;会在最后发现:|ngram|ACTIVE|FTPARSER|NULL|GPL||rpl_semi_sync_master|ACTIVE|REPLICATION|semisync_master.so|GPL|+—————————-+———-+——————–+——————–+———+表明成功。从:slave安装插件:mysql>INSTALLPLUGINrpl_semi_sync_slaveSONAME’semisync_slave.so’;QueryOK,0rowsaffected(0.11sec)使用:showplugins;或:mysql>SELECTPLUGIN_NAME,PLUGIN_STATUSFROMINFORMATION_SCHEMA.PLUGINSWHEREPLUGIN_NAMELIKE’%semi%’;如果发现|rpl_semi_sync_slave|ACTIVE|REPLICATION|semisync_slave.so|GPL|+—————————-+———-+——————–+——————-+—–即为成功。启动半同步:主:mastermysql>SETGLOBALrpl_semi_sync_master_enabled=1;QueryOK,0rowsaffected(0.00sec)mysql>showstatuslike’Rpl_semi_sync_master_status’;+—————————–+——-+|Variable_name|Value|+—————————–+——-+|Rpl_semi_sync_master_status|ON|+—————————–+——-+1rowinset(0.00sec)从:slavemysql>SETGLOBALrpl_semi_sync_slave_enabled=1;QueryOK,0rowsaffected(0.00sec)mysql>showstatuslike’Rpl_semi_sync_slave_status’;+—————————-+——-+|Variable_name|Value|+—————————-+——-+|Rpl_semi_sync_slave_status|ON|+—————————-+——-+1rowinset(0.00sec)最后重新启动一下I/O线程:mysql>STOPSLAVEIO_THREAD;my开发云主机域名sql>STARTSLAVEIO_THREAD;测试在不关闭slave的情况下创建数据库,主从库会很快写入主:mysql>showstatuslike’Rpl_semi_sync_master_status’;+—————————–+——-+|Variable_name|Value|+—————————–+——-+|Rpl_semi_sync_master_status|ON|+—————————–+——-+1rowinset(0.00sec)mysql>createdatabaseginkgo;QueryOK,1rowaffected(0.05sec):mysql>showstatuslike’Rpl_semi_sync_slave_status’;+—————————-+——-+|Variable_name|Value|+—————————-+——-+|Rpl_semi_sync_slave_status|ON|+—————————-+——-+1rowinset(0.00sec)mysql>showdatabases;+——————–+|Database|+——————–+|information_schema||ginkgo||mysql||performance_schema||sys|+——————–+5rowsinset(0.00sec)将从上的slave关闭:mysql>dropdatabaseginkgo;QueryOK,0rowsaffected(10.06sec)mysql>showstatuslike’Rpl_semi_sync_master_status’;+—————————–+——-+|Variable_name|Value|+—————————–+——-+|Rpl_semi_sync_master_status|OFF|+—————————–+——-+1rowinset(0.00sec)slave长时间不给ack回应,被迫转化为异步,时间也较长,主要是等待时间。从上肯定没有数据变化。**注意,写数据库时一定要在配置文件中确定自己是允许那个库同步,不要瞎建库奥。

相关推荐: 登录mysql报ERROR 1045 (28000): Access denied 解决方法

登录mysql时系统报错原因 ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES) 原因一 可能是密码真的输入错误 原因二 安装时有问题,比如可能…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/05 17:58
下一篇 06/05 17:58

相关推荐