mysql的两种复制模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的两种复制模式相关的知识,希望对你有一定的参考价值。

mysql的复制术语

扩展的方式:
    Scale up
    Scale Out 

复制:
    向外扩展
    二进制日志 
    单向

复制功用:
    数据分布
    负载均衡:读操作,适用于读密集型的应用
    备份
    高可用和故障切换
    mysql升级测试

主从复制:
    从服务器:
        I/O线程:从master请求二进制日志信息,并保存至中继日志;
        SQL线程:从relay log中读取日志信息,在本地完成重放;

    异步模式:async
        1、从服务器落后于主服务器;
        2、主从数据不一致;

    二进制日志的格式:SET datetime = now()
        1、基于行
        2、基于语句
        3、混合

    双主:
        读:负载均衡
        写:无法均衡

    Perlcona-Galera Cluster

配置过程:

    1、master
        (1) 启用二进制日志;
        (2) 设置一个在当前集群中惟一的server-id;
        (3) 创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号;

    2、slave
        (1) 启用中继日志;
        (2) 设置一个在当前集群中惟一的server-id;
        (3) 使用有复制权限用户账号连接至主服务器,并启动复制线程;

    传统上:一主多从,但一从一主;
        而今:一从多主;

    服务器程序版本:最好相同;从高;

一、mysql的复制,主从模式

1.主服务器启动二进制日志,编辑/etc/my.cnf在其中增加如下两行内容
            server-id=1                                   mysqld的id号
            log-bin=/var/lib/mysql/mysql-bin   指明二进制日志的文件名,和路径
                            innodb-file-per-table=1

技术图片

 2.主服务器创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号
 GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
                                         ‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;

技术图片

 3.从服务器启动中继日志,编辑/etc/my.cnf在其中增加如下四行内容
                         server-id=2
                         relay-log=/var/lib/mysql/relay-log
                         relay-log-index=relay-log.index
                         innodb-file-per-table=1

技术图片

4.从服务器配置从服务功能,首先查看主服务器的二进制pos位置
CHANGE MASTER TO MASTER_HOST=‘192.168.130.128‘,MASTER_USER=‘repluser‘,
MASTER_PMASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000004‘,MASTER_LOG_POS=187;

技术图片

5.查看从服务器状态,开启IO与mysql进程,开启后就可以在线复制了
    SHOW SLAVE STATUSG    查看状态
    START SLAVE                       开启进展

技术图片技术图片

 6.效果展示,在主服务器中创建一个库CREATE DATABASE mydb2;
         在从服务器中查看SLAVE 状态,可以看到从服务器已经读取
         到pos=272的位置,证明从服务器可以复制

技术图片

7.作为从服务器,应该不允许被写入数据,即限制从服务器只读
        a.在从服务器启动read_only;但仅对非具有SUPER权限的用户有效;
        b.阻止所有用户 :MariaDB> FLUSH TABLES WITH READ LOCK;
8.保证复制事务安全
        在master节点启用参数:
            sync_binlog = on                   将内存中的二进制同步到硬盘
            如果用到的为InnoDB存储引擎:
                innodb_flush_logs_at_trx_commit
                innodb_support_xa=on            
        在slave节点:
            skip_slave_start  不让slave线程自动启动,需手动启动

二、mysql的复制,双主模式

 双主:
        读:负载均衡
        写:无法均衡

    互为主从:
        1.数据不一致; 
        2.自动增长id
            定义一个节点使用奇数id
                auto_increment_offset=1
                auto_increment_increment=2
            定义另一个节点使用偶数id
                auto_increment_offset=2
                auto_increment_increment=2

        (1) 各自使用不同的server id
        (2) 都启用binlog和relay log 
        (3) 定义自动增长的id字段的增长方式
        (4) 都授权有复制权限的用户账号
        (5) 各自把对方指定为主服务器 

    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 
    ‘repluser‘@‘172.16.%.%‘ IDENTIFIED BY ‘replpass‘;

    3.在上面的基础上,两台主机的配置文件/etc/my.cnf
     192.168.130.128
     配置:server-id=1
                            log-bin=/var/lib/mysql/mysql-bin
                            relay-log=/var/lib/mysql/relay-log
                            relay-log-index=relay-log.index
                            innodb-file-per-table=1
                            auto_increment_offset=1
                            auto_increment_increment=2
    192.168.130.129
    配置:server-id=5
                            log-bin=/var/lib/mysql/mysql-bin
                            relay-log=/var/lib/mysql/relay-log
                            relay-log-index=relay-log.index
                            innodb-file-per-table=1
                            auto_increment_offset=2
                            auto_increment_increment=2

技术图片技术图片

4.在每个主机的mysqld上都创建一个有复制权限的用户
    192.168.130.128
    配置:
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
                                         ‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;

    192.168.130.128
    配置:
    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
                                         ‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;

    5.查看每个主机的二进制日志pos位置,然后按照该位置,启动每个主机的slave服务
    192.168.130.128 
    配置:
      CHANGE MASTER TO   MASTER_HOST=‘192.168.130.129‘,
        MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
        MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=288;

    192.168.130.12
    配置:
      CHANGE MASTER TO   MASTER_HOST=‘192.168.130.128‘,
        MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
        MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=106;

技术图片
技术图片

6.用START SLAVE;开启两台机的slave功能便可完成双主模型
7.效果展示
        当128主机创建一个库时129的读取进度见图,
        当129主机创建一个库时128的读取进度见图,

技术图片
技术图片

以上是关于mysql的两种复制模式的主要内容,如果未能解决你的问题,请参考以下文章

查看mysql数据表结构的两种方法你会吗?

Mysql使用binlog恢复数据解决误操作问题的两种方法

创建后台任务的两种代码模式

使用mybatis的两种方式

MySQL 5.7.20 Group Relication(组复制)搭建手册

查看表结构的两种方式