mysql--主主复制

主主复制:            

        我们之前的主从配置中,2台服务器地位有差别:一主一从(从服务器一是起到备份作用,一是起到分担查询压力的作用)

        接下来的配置,2台服务器之间将会没有明显的地位差距,两者可以同步对方的内容。原理很简单:就是这两台服务器互为主从,相互同步


具体实现步骤:

        ①两台服务器的my.conf配置文件中既是主,也是从(server-id要唯一)

        ②互为主从:

mysql--主主复制_第1张图片

        ③mysql版本低于5.6注意设置binlog_checksum=none

            Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not h

            Binlog中最容易踩到的坑


主主复制主键冲突问题解决方案:

        2台mysql地位相等, 假如2个请求同时到达2台服务器。请求A节点,stu的id为1。请求的B节点,stu的id也为1,这时候主键很容易冲突。

        让A服务器的主键id从1,3,5,7来增长(从1开始自增,偏移量2)

            set global auto_increment_increment = 2;

            set global auto_increment_offset = 1;

            set session auto_increment_increment = 2;

            set session auto_increment_offset = 1;

        让B服务器的主键id从2,4,6,8来增长(从2开始自增,偏移量2)

            set global auto_increment_increment = 2;

            set global auto_increment_offset = 2;

            set session auto_increment_increment=2;

            set session auto_increment_offset = 2;

        假如后期我们还需要加sql服务器,我们还可以用其他办法去限制。比如在oracle有sequnce,序列(序列每次访问,生成递增/递减的数)

        以redis为例,我们可以专门构建一个global:userid。每次PHP插入mysql前,执行incr->global:userid, 得到一个递增的userid


被动模式下的主主复制:

        是指2台服务器地位一样, 但其中一台为只读,并且业务中也只写某1台服务器.   

        好处:如果供写入的服务器出了故障,能迅速的切换到从服务器, 或者出于检修等目的,把写入功能切换到另一台服务器也比较方便.

mysql--主主复制_第2张图片
拥有从服务器的主主复制,在实际应用中也很多.

环形结构

        即3台服务器,每台服务器均与其前/后的服务器形成master/slave的关系

        不好之处:任一台服务器坏了,影响其他2台. 不如2台形成的主主复制稳定.

mysql--主主复制_第3张图片
在实际使用中,并不多

在客户端中的应用 :

        ①直接在mysql基类做判断,不需要添加任何软件。比如discuz论坛

mysql--主主复制_第4张图片

        ②用集群中间件

            官方:mysql-proxy

            国产:amoeba

你可能感兴趣的:(mysql--主主复制)