MySQL 是如何保证主备同步?


主备关系的建立:

    一开始创建主备关系的时候,是由备库指定的,比如基于位点的主备关系,备库说“我要从binlog文件A的位置P”开始同步,主库就从这个指定的位置开始往后发。
    而主备关系搭建之后,是主库决定要发给数据给备库的,所以主库有新的日志也会发给备库。

MySQL 主备切换流程:

    客户端读写都是直接访问A,而节点B是备库,只要将A的更新都同步过来,到本地执行就可以保证数据是相同的。
    当需要切换的时候就把节点换一下,A的节点B的备库

一个事务完整的同步过程:

    备库B和主库A建立来了长链接,主库A内部专门线程用于维护了这个长链接。
    在备库B上通过changemaster命令设置主库A的IP端口用户名密码以及从哪个位置开始请求binlog包括文件名和日志偏移量
    在备库B上执行start-slave命令备库会启动两个线程:io_thread和sql_thread分别负责建立连接和读取中转日志进行解析执行
    备库读取主库传过来的binlog文件备库收到文件写到本地成为中转日志
    后来由于多线程复制方案的引入,sql_thread演化成了多个线程。

0 0
讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
帮助