美文网首页
mysql主从复制

mysql主从复制

作者: code_god_ming | 来源:发表于2020-02-13 12:31 被阅读0次

    MySQL主从复制的流程

    抠图

    1.主库db的更新事件(update、insert、delete)被写到binlog

    2.主库创建一个binlog dump thread,把binlog的内容发送到从库

    3.从库启动并发起连接,连接到主库

    4.从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log文件中

    从库启动之后,创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db

    Binlog 日志的三种格式

    格式类型                      格式特性

    ROW                            仅保存记录被修改细节,不记录SQL语句上下文相关信息

    STATEMENT                每一条会修改数据的SQL都会记录在Binlog中

    MIXED                          以上两种level的混合使用

    主从复制的几种方式

    同步复制

    所谓的同步复制,意思是master的变化,必须等待slave-1,slave-2,...,slave-n完成后才能返回。

    这样,显然不可取,也不是MYSQL复制的默认设置。比如,在WEB前端页面上,用户增加了条记录,需要等待很长时间。

    异步复制

    如同AJAX请求一样。master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。

    半同步复制

    master只保证slaves中的一个操作成功,就返回,其他slave不管。

    这个功能,是由google为MYSQL引入的。

    主从复制分析

    问题:当master的二进制日志每产生一个事件,都需要发往slave,如果我们有N个slave,那是发N次,还是只发一次?

    如果只发一次,发给了slave-1,那slave-2,slave-3,...它们怎么办?

    显然,应该发N次。实际上,在MYSQL master内部,维护N个线程,每一个线程负责将二进制日志文件发往对应的slave。master既要负责写操作,还的维护N个线程,负担会很重。可 以这样,slave-1是master的从,slave-1又是slave-2,slave-3,...的主,同时slave-1不再负责select。 slave-1将master的复制线程的负担,转移到自己的身上。这就是所谓的多级复制的概念。

    相关文章

      网友评论

          本文标题:mysql主从复制

          本文链接:https://www.haomeiwen.com/subject/btmkfhtx.html