mariadb主从复制:
复制:每个节点都有相同的数据集
从节点:
I/O Thread:从master请求二进制日志事件,并保持在中继日志中
SQL Thread:从中继日志中读取日志事件,在本地完成重放
主节点:
dump Thread:为每个slave的I/O Thread启动一个dump线程,用于向其发送binary log events
特点:
1.异步复制
2.主从数据不一致比较常见
3.一主多从
4.从服务器还可以有从服务
配置过程:
主节点:
1.启动二进制日志
2.为当前节点设置一个全局唯一的ID号
3.创建有复制权限的用户账号
replication slave,replication client
从节点:
1.启动中继日志
2.位当前节点设置一个全局唯一的ID号
3.使用有复制权限的用户账号连接至主服务器,并启动复制线程

    复制架构中应该注意的问题:
    1.限制从服务器为只读
        在从服务器上设置read_only=ON;此限制对拥有SUPER权限的用户均无效;
        阻止所有用户;
            mysql>flush tables with read lock;
    2.如何保证主从复制的事务安全:
        在master节点启用参数:
            sync_binlog=ON
            如果用到的为InnoDB存储引擎;
            innodb_flush_logs_at_trx_commit=ON
            inndb_support_xa=ON
        在slave节点;
            skip_slave_start=ON

    复制过滤器
让从节点仅复制指定的数据库,或指定数据库的指定表
有两种实现方式;
    1.主服务器仅向二进制日志中记录与特定数据库(特定表)相关的事件;
    问题:事件还原无法实现:不建议使用
    binlog_do_db=       #数据库白名单列表
    binlog_ignore_do    #数据库黑名单列表
    2.从服务SQL_THREAD在replay中继日志的事件时,仅读取与特定数据库(特定表)相关的事件并应用于本地
    问题:会造成网络磁盘IO浪费;
    replicate_do_db=
    replicate_ignore_db=
    replicate_do_table=
    replicate_ignore_table=
    replicate_wind_do_table=
    replicate_wind_ignore_table=
主从复制配置:
    主节点:
        vi /etc/my.cnf
        在[mysqld]中加入:
        log-bin=mysql_bin_log    #启动二进制日志
        server-id=1            #主节点和从节点一定要不通
        innodb_file_per_table=ON 
        skip_name_resolve=ON
        重启mariadb:systemctl  restart mariadb
        创建复制用户并授权:
        MariaDB [(none)]> grant replication slave,replication slave on *.* to 'repluser'@'172.16.%.%' identified by '123456'
        MariaDB [(none)]> show master logs;
        +----------------------+-----------+
        | Log_name             | File_size |
        +----------------------+-----------+
        | mysql_bin_log.000001 |     30379 |
        | mysql_bin_log.000002 |   1038814 |
        | mysql_bin_log.000003 |       264 |
        | mysql_bin_log.000004 |       264 |
        | mysql_bin_log.000005 |       245 |        #记住这个二进制文件名和对应的序号
        +----------------------+-----------+
        5 rows in set (0.00 sec)

    从节点:
          vi /etc/my.cnf
          在[mysqld]中加入:
            relay-log=relay-log
            server-id=2
            innodb_file_per_table=ON
            skip_name_resolve=ON

        重启mariadb:systemctl  restart mariadb    
      连接主服务器:
        MariaDB [(none)]> change master to master_host='172.16.6.12',master_user='repluser',master_password='123456',master_log_file='mysql_bin_log.000005',master_log_pos=245;
        开始复制:
        MariaDB [(none)]> start slave;
        查看复制状态:
        MariaDB [(none)]> show slave status\G;

        mariadb半同步复制:   
        主节点
        MariaDB [(none)]> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
        MariaDB [(none)]> set global rpl_semi_sync_master_enabled=1;
        MariaDB [(none)]> show plugins;
        MariaDB [(none)]> show global variables like '%semi%';
        MariaDB [(none)]> show global status like '%semi%';
        从节点:
        MariaDB [(none)]> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
        MariaDB [(none)]> set global rpl_semi_sync_slave_enabled=1; 
        MariaDB [(none)]> show plugins;
        MariaDB [(none)]> show global variables like '%semi%';  
        MariaDB [(none)]> start slave