mariadb主從複製/半同步複製

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章