美文网首页
Mysql主从配置,实现读写分离

Mysql主从配置,实现读写分离

作者: 错位的季节 | 来源:发表于2017-10-15 18:21 被阅读147次

    主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。

    1.1 mysql支持的复制类型:
    (1):基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。 一旦发现没法精确复制时, 会自动选着基于行的复制。   
    (2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持 ‘’
    (3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
    1.2 . 复制解决的问题
    MySQL复制技术有以下一些特点:
    (1) 数据分布 (Data distribution )
    (2) 负载平衡(load balancing)
    (3) 备份(Backups)
    (4) 高可用性和容错行 High availability and failover

    复制如何工作

    (1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
    (2) slave将master的binary log events拷贝到它的中继日志(relay log);
    (3) slave重做中继日志中的事件,将改变反映它自己的数据。

    复制过程.png

    ‘’

    基于记录的复制(Row-Based Replication)

    MySQL增加基于记录的复制,在二进制日志中记录下实际数据的改变,这与其它一些DBMS的实现方式类似。这种方式有优点,也有缺点。优点就是可以对任何语句都能正确工作,一些语句的效率更高。主要的缺点就是二进制日志可能会很大,而且不直观,所以,你不能使用mysqlbinlog来查看二进制日志。
    对于一些语句,基于记录的复制能够更有效的工作,如:
    mysql> INSERT INTO summary_table(col1, col2, sum_col3)
    -> SELECT col1, col2, sum(col3)
    -> FROM enormous_table
    -> GROUP BY col1, col2;
    假设,只有三种唯一的col1和col2的组合,但是,该查询会扫描原表的许多行,却仅返回三条记录。此时,基于记录的复制效率更高。

    4、复制的常用拓扑结构

    复制的体系结构有以下一些基本原则:
    (1) 每个slave只能有一个master;
    (2) 每个slave只能有一个唯一的服务器ID;
    (3) 每个master可以有很多slave;
    (4) 如果你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新。

    4.1、单一master和多slave
    一主多从

    如果写操作较少,而读操作很时,可以采取这种结构。你可以将读操作分布到其它的slave,从而减小master的压力。但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题。
    这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。一些建议:
    (1) 不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存储引擎);
    (2) 用一个slave作为备用master,只进行复制;
    (3) 用一个远程的slave,用于灾难恢复;

    4.2、主动模式的Master-Master(Master-Master in Active-Active Mode)
    主主.png

    Master-Master复制的两台服务器,既是master,又是另一台服务器的slave。这样,任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

    主动的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。这种结构最大的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:
    在第一个服务器上执行:
    mysql> UPDATE tbl SET col=col + 1;
    在第二个服务器上执行:
    mysql> UPDATE tbl SET col=col * 2;
    那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误。
    实际上,MySQL并不支持其它一些DBMS支持的多主服务器复制(Multimaster Replication),这是MySQL的复制功能很大的一个限制(多主服务器的难点在于解决更新冲突),但是,如果你实在有这种需求,你可以采用MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台。但是,可以通过其它一些方式来模拟这种多主服务器的复制。

    相关文章

      网友评论

          本文标题:Mysql主从配置,实现读写分离

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