• ADADADADAD

    msyql 的半同步复制[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:12:32

    作者:文/会员上传

    简介:

    mysql的半同步复制:mysql的异步复制:mysql默认使用异步方式进行同步,master在执行客户端提交的事务后会将结果返回给客户端,表示客户端的操作已经生效,同时会将该操作的binlog通

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。


    mysql的半同步复制:

    mysql的异步复制:mysql默认使用异步方式进行同步,master在执行客户端提交的事务后会将结果返回给客户端,表示客户端的操作已经生效,同时会将该操作的binlog通过dumper通知slave来取,再正常情况下,slave会将该binlog写入本地,并通过sql语句写入从库中与主库同步数据,master对从库是否写入不负任何责任。

    主和从的复制过程是由三个线程参与完成的,其中有两个线程(sql语句和I/O线程在slave端),一个I/O线程在master端。

    mysql的同步复制:这是一个偏执狂,客户端向主库提交数据,主库写入数据只有从库将数据写入本地后,返回给主库一个回执,主库向客户端返回消息,表示已经成功受理该任务。

    mysql半同步:在master的dumper线程通知salve,同时增加了一个ack,mysql5.7支持在事务提交前等待ack,当slave没有返回给masterack时,将会自动降级为异步复制。

    半同步通过rpl_semi_sync_master_wait_point参数来控制半同步下,master事务提交前的方式

    mysql中的半同步参数after_sync,master将每个事务写入binlog传递到slave刷新到磁盘relaylog,master等待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|

    +----------------------------+----------+--------------------+-------------------+-----

    即为成功。

    启动半同步:

    主:master

    mysql>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)

    从:slave

    mysql>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;

    mysql>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回应,被迫转化为异步,时间也较长,主要是等待时间。

    从上肯定没有数据变化。

    **注意,写数据库时一定要在配置文件中确定自己是允许那个库同步,不要瞎建库奥。


    msyql 的半同步复制.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysql半同步