首页 > 数据库技术 > 详细

mysql的两种复制模式

时间:2019-03-02 23:49:45      阅读:247      评论:0      收藏:0      [点我收藏+]
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 STATUS\G    查看状态
    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的两种复制模式

原文:https://blog.51cto.com/14055961/2357235

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!