欢迎访问金谷下载网 专业电脑手机游戏绿色软件网站

资讯|最近更新

当前位置:首页软件教程软件信息资讯 → MariaDB主从复制及半同步复制

MariaDB主从复制及半同步复制

时间:2017-11-30 12:20:54人气:作者:本站作者我要评论

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

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

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

配置过程:
    1、master
        (1) 启用二进制日志;
        my.cnf----> log_bin=log_bin.log
        (2) 设置一个在当前集群中惟一的server-id;
        my.cnf----> server_id=1
        (3) 创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号;
      MariaDB>GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'192.168.20.%' identified by 'PASSWORD';
        (4)查看Master日志信息,记录,复制时使用
        MariaDB>SHOW MASTER STATUS;
    +----------------+----------+--------------+------------------+
    | File                      | Position     | Binlog_Do_DB | Binlog_Ignore_DB |
    +----------------+----------+--------------+------------------+
    | log_bin.000014 | 30155002 |              |                  |
    +----------------+----------+--------------+------------------+

    2、slave
        (1) 启用中继日志;
        my.cnf---->relay_log=relay-bin
        (2) 设置一个在当前集群中惟一的server-id;
        my.cnf----> server_id=2
        (3) 使用有复制权限用户账号连接至主服务器,并启动复制线程;
        MariaDB>CHANGE MASTER TO MASTER_HOST='192.168.20.1', MASTER_USER='slave', MASTER_PASSWORD='PASSWORD', MASTER_LOG_FILE='log_bin.0000014', MASTER_LOG_POS=30155002, MASTER_CONNECT_RETRY=5
        MariaDB>START SLAVE;
        (4)查看Slave复制状态
        MariaDB>SHOW SLAVE STATUS\G

     一主多从,一从一主;服务器程序版本最好相同

总结:
    master: binlog dump 
    slave: IO thread, SQL thread 

    slave: 如果连接至主服务器:
        CHANGE MASTER TO option [, option] ...

        option:
        MASTER_BIND = 'interface_name'
        | MASTER_HOST = 'host_name'     主服务器地址
        | MASTER_USER = 'user_name'     有复制权限的用户名
        | MASTER_PASSWORD = 'password'   用户密码
        | MASTER_PORT = port_num         主服务器的端口
        | MASTER_CONNECT_RETRY = interval    连接重试时间间隔
        | MASTER_HEARTBEAT_PERIOD = interval    心跳检测时间间隔
        | MASTER_LOG_FILE = 'master_log_name'    主服务器二进制日志文件
        | MASTER_LOG_POS = master_log_pos          二进制日志文件中的位置
        | RELAY_LOG_FILE = 'relay_log_name'           
        | RELAY_LOG_POS = relay_log_pos
        | MASTER_SSL = {0|1}
        | MASTER_SSL_CA = 'ca_file_name'
        | MASTER_SSL_CAPATH = 'ca_directory_name'
        | MASTER_SSL_CERT = 'cert_file_name'
        | MASTER_SSL_KEY = 'key_file_name'
        | MASTER_SSL_CIPHER = 'cipher_list'
        | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}
        | IGNORE_SERVER_IDS = (server_id_list)

主主:
    互为主从:
        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 'slave'@'192.168.20.%' IDENTIFIED BY 'PASSWORD';

复制如何开始?
    主节点运行很长时间,且已经有一定规模的数据,如何启动复制?

    在主节点做一个完全备份,并记录二进制日志文件及位置;
    在从节点恢复此完全备份,并在启动复制时从记录的二进制日志文件和位置开始;

复制时应该注意的问题:
    1、如何限制从服务器只读?
        在从服务器启动read_only;但仅对非具有SUPER权限的用户有效;

            阻止所有用户 :MariaDB> FLUSH TABLES WITH READ LOCK;

    2、如何保证主从复制时的事务安全?
        在master节点启用参数:
            sync_binlog = on

            如果用到的为InnoDB存储引擎:
                innodb_flush_logs_at_trx_commit
                innodb_support_xa=on

        在slave节点:
            skip_slave_start

        主节点:
            sync_master_info = 1

        从节点
            sync_relay_log = 1
            sync_relay_log_info = 1

    3、半同步复制
    主节点:
        MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
        Query OK, 0 rows affected (0.05 sec)            

        MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';
        +------------------------------------+-------+
        | Variable_name                      | Value |
        +------------------------------------+-------+
        | rpl_semi_sync_master_enabled       | OFF   |
        | rpl_semi_sync_master_timeout       | 10000 |
        | rpl_semi_sync_master_trace_level   | 32    |
        | rpl_semi_sync_master_wait_no_slave | ON    |
        +------------------------------------+-------+
        4 rows in set (0.00 sec)

        MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1;
        Query OK, 0 rows affected (0.00 sec)

        MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout=2000;
        Query OK, 0 rows affected (0.00 sec)

    从节点:
        MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
        Query OK, 0 rows affected (0.05 sec)

        MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';
        +---------------------------------+-------+
        | Variable_name                   | Value |
        +---------------------------------+-------+
        | rpl_semi_sync_slave_enabled     | OFF   |
        | rpl_semi_sync_slave_trace_level | 32    |
        +---------------------------------+-------+
        2 rows in set (0.00 sec)

        MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
        Query OK, 0 rows affected (0.00 sec)

    如果从服务器已经启动,还需要重启IO_THREAD; 

4、复制过滤器
    让slave仅复制有限的几个数据库,而非所有;

    有两种实现思路:

    (1) 主服务器仅向二进制日志中记录有特定数据库相关的写操作;
        问题:即时点还原将无法全面实现; 

        binlog_do_db=                  # 数据库白名单
        binlog_ignore_db=           # 数据库黑名单

    (2)从服务器的SQL_THREAD仅在中断日志中读取特定数据相关的语句并应用在本地;
        问题:会造成网络带宽和磁盘IO的浪费;

        Replicate_Do_DB=
        Replicate_Ignore_DB=
        Replicate_Do_Table=
        Replicate_Ignore_Table= 
        Replicate_Wild_Do_Table= 
        Replicate_Wild_Ignore_Table=

5、基于SSL的复制
    前提:支持SSL
    (1) 主服务器端配置证书和私钥,并创建一个要求必须使用SSL连接的复制账号(REQUIRE SSL);
    (2) SLAV端连接master时,使用MASTER_SSL相关的选项来配置证书等信息;

6、跟复制功能相关的文件:
    master.info:用于保存slave连接至master时的相关信息;
    relay-log.info:保存了当前slave节点上已经复制的当前二进制日志和本地relay log日志对应关系; 

7、复制的监控和维护
    (1) 清理日志:PURGE 

    (2) 复制监控
        SHOW MASTER STATUS
        SHOW BINLOG EVENTS
        SHOW BINARY LOGS

        SHOW SLAVE STATUS

    (3) 如何判断slave是否落后于master        
     Seconds_Behind_Master: 0

     (4) 如何确定主从节点数据是否一致?
        通过表自身的CHECKSUM检查
        使用percona-tools中pt-table-checksum

    (5) 数据不一致的修复方法:
        重复复制;

相关文章

  • 微信一手机号可注册两账号 微信全面支持注册小号

    经过一段时间的小规模测试,微信终于全面支持注册“小号”了!同一个手机号能再次多注册一个辅助账号,这样的新功能能够更好的对微信账户进行管理,但是想要注册小号也是有条件限制..
  • Midjourney使用方法 Midjourney怎么付费

    Midjourney V5测试版本已经推出,目前大家可以直接在这个网站社区进行AI绘画,V5的精美程度堪比真人照片了,不过有很多国内的小伙伴们不知道如何使用,这里小编带来比较详细的操作..

网友评论

推荐文章

关于金谷下载网 | 联系方式 | 发展历程 | 版权声明 | 下载帮助(?) | 广告联系 | 网站地图 | 友情链接

Copyright 2020-2029 JGSC.CC 【金谷下载网】 版权所有 豫ICP备17041013号-5 | 豫公网安备 42033302000245号

声明: 本站所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告