close

MariaDB HA有幾種類型

1. 同步 -> 也就是galera cluster
2. 半同步 -> Semisynchronous Replication
3. 異步 -> standard replication

本文介紹的就是在Mysql時代早期就有的starndard Replication.
所以是很基本的功能,
不過也玩出了很多花樣,
有MS, MM, MMM, Chain, Circle等等,
其實就是利用MariaDB Server可以是Master+Slave的特性.

0. 在master上確認
    0-1. 檢查my.cnf檔

           不使用bind-address和skip-networking,這可能會限制遠端連線.
           server-id=unique_value  , 在同一個replication set內不重複
           log-bin = log_name
           log-slave-updates=1  =>  slave想同時具有master資格時使用

    0-2. 建立使用者
           mysql> CREATE USER 'replication_user'@'ip' IDENTIFIED by 'password';
           mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ips';
           mysql> FLUSH PRIVILEGES;


************************補充說明主從的binary log行為**********************

A. log-bin => 對該台Server操作時會寫入日誌,也就是binary log, 使用 show master status\G; 檢查有無啟動.

B. relay-log => Slave Server透過 IO thread向Master Dump thread要求資料,dump thread將binary log內容傳給slave IO thread,並記錄於relay-log內,slave主機SQL thread再從relay-log解出應用到Slave Server上 (這是replication的流程)

C. log-slave-updates => 當Slave Server開啟此選項時,從relay-log應用的行為會寫入Slave Server的log-bin日誌中,好讓這些行為能被以此Server為Master的Slave所獲得.

                                        否則一般情況下從Master來的行為不會記錄在log-bin檔案內.

******************************************************************************

1. 備份 參考mysqldump 
    1-1. 從Master (特別說明不要lock 或 維護時執行)
           mysqldump -uuser -p --skip-lock-tables --single-transaction --master-data=2  --databases db1 db2 > dumpfile.sql

    1-2. 從Slave(建議)
           mysql> stop slave 'connection_name' SQL_THREAD;
           mysql> show slave 'connection_name' status\G;
          
(顯示的Relay_Master_Log_File和Exec_Master_Log_Pos代表新slave連接原master作為master時,步驟3所需填入的值)
           shell> mysqldump -uuser -p --master-data=2 --databases db1 db2 > dumpfile.sql
           (備份檔內的MASTER_LOG_FILE和MASTER_LOG_POS代表新slave將slave做為mster時,步驟3所需填入的值)
           mysql> start slave 'connection_name';
           或者
           mysql> stop slave 'connection_name' SQL_THREAD;
           mysql> show slave 'connection_name' status\G;
           shell> mysqldump -uuser -p --dump-slave=2 --databases db1 db2 > dumpfile.sql   

           (備份檔內的MASTER_LOG_FILE和MASTER_LOG_POS代表新slave連接原master作為master時,步驟3所需填入的值)
           mysql> start slave 'connection_name';

2. 還原
    shell> mysql -uuser -p < dumpfile.sql

3. 設定Slave
    mysql> CHANGE MASTER 'connection_name' TO
                 MASTER_HOST='master_ip',
                 MASTER_USER='replication_user',
                 MASTER_PASSWORD='password',
                 MASTER_LOG_FILE='',
                 MASTER_LOG_POS=,
                 MASTER_CONNECT_RETRY=10;

4. 啟動
    mysql> start slave 'connection_name';

5. 檢查
    mysql> show slave 'connection_name' status\G;

6. Global Transaction ID , 中文參考(詳盡)
    首先GTID的使用比較傳統的方式,有兩方面重要進步,

    a. 容易切換Master Host,不用重新找新Master需要使用的起始點.

    b. Slave狀態屬於crash-safe,主要因為將紀錄Slave狀態的GTID位置修改複寫表格數據包在同一個交易內.所以crash的話,數據與斷點會一致.

    設定方面,
    CHANGE MASTER 'connection_name' TO時,

    不使用MASTER_LOG_FILE和MASTER_LOG_POS,
    而是用MASTER_USE_GTID= slave_pose | current_pos | no取代.

    也可以很方便的利用BINLOG_GTID_POS("LOG_FILE", LOG_POS)函式,轉換成GTID位置.
    利用GTID的優點,可以很好的處理failover後的自動重跟.

參考
Setting Up Replication
MySQL高可用淺析:MySQL HA方案

MySQL 資料複製基礎介紹

 

arrow
arrow
    文章標籤
    MariaDB replication
    全站熱搜

    abcg5 發表在 痞客邦 留言(0) 人氣()