配置mysql5.5主從複製、半同步複製、主主複製

鄭子明發表於2016-01-18

mysql主伺服器 192.168.8.40
mysql從伺服器 192.168.8.41


全新配置過程(主和從資料庫都沒有資料):

   主從複製主伺服器設定:

     1.改server-id
     2.啟用二進位制日誌
     # mkdir /data/binlog

     # chown -R mysql.mysql /data/binlog


     3.建立有複製許可權的賬號
     mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.8.41' IDENTIFIED BY 'replpass2014';
     mysql> FLUSH PRIVILEGES;



  主從複製 從伺服器設定:

      1.給server-id

      2.啟用中繼日誌
      # mkdir /data/relaylog/
      # chown -R mysql.mysql /data/relaylog


      vim /etc/my.cnf
      relay-log = /data/relaylog/relay-bin


      重啟服務使之生效
      # service mysqld restart
      3.連線主伺服器
      mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.40',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014';
      mysql> START SLAVE;


若主伺服器執行了一段時間,並且產生了大量的資料

則需要先將主從伺服器資料保持一致

      
將主資料庫的資料庫匯出,匯入到從伺服器中
     # mysqldump --all-databases --flush-logs --master-data=2 --lock-all-tables > /root/all.sql
從伺服器上恢復
     # mysql < all.sql


     mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.40',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014',MASTER_LOG_FILE='master-bin.000007',MASTER_LOG_POS=107;


通過從伺服器的狀態觀察

mysql > show slave status;


驗證是否一致

通過在主伺服器上新增刪除、資料檢視slave伺服器是否一致


限制從伺服器只讀

      在從伺服器上啟動read-only=ON


      注意:僅能限制那不具有super許可權的使用者無法執行寫操作


半同步複製



    半同步主伺服器設定

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> 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    |
+------------------------------------+-------+


mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=2000;




半同步從伺服器配置

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> show global variables like '%semi%';


mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;




在主伺服器驗證半同步
mysql> show global status like '%semi%';


解除安裝外掛:
uninstall 


一旦某次等待超時,會自動降級為非同步


雙主複製:


1)、在兩臺伺服器上各自建立一個具有複製許可權的使用者;

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.%.%' IDEnTIFIED BY 'replpass2014';
mysql> FLUSH PRIVILEGES;


2)、修改配置檔案:

# 主伺服器A上
[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
# 步長
auto-increment-increment = 2
# 起始值
auto-increment-offset = 1
#不要自動啟用slave
skip_slave_start


# 主伺服器B上
[mysqld]
server-id = 11
log-bin = mysql-bin
relay-log = relay-mysql
# 步長
auto-increment-increment = 2
# 起始值
auto-increment-offset = 2 
#不要自動啟用slave
skip_slave_start


說明:
auto_increment_offset表示自增長欄位從那個數開始,他的取值範圍是1 .. 65535
auto_increment_increment表示自增長欄位每次遞增的量,其預設值是1,取值範圍是1 .. 65535


建立二進位制日誌和中繼日誌目錄並授權給mysql使用者
# mkdir /data/relaylog
# chown -R mysql.mysql /data/relaylog


# mkdir /data/binlog
# chown -R mysql.mysql /data/binlog


重啟兩臺主伺服器的mysql服務
# service mysqld restart


3)、如果此時兩臺伺服器均為新建立,且無其它寫入操作,各伺服器只需記錄當前自己二進位制日誌檔案及事件位置,以之作為另外的伺服器複製起始位置即可



serverA|mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
           File: mysql-bin.000008
       Position: 107
   Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)


server2|mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
           File: mysql-bin.000003
       Position: 107
   Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.00 sec)


4、各伺服器接下來指定對另一臺伺服器為自己的主伺服器即可:

主伺服器A:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.41',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014',MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=107;



主伺服器B:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.40',MASTER_USER='repluser',MASTER_PASSWORD='replpass2014',MASTER_LOG_FILE='master-bin.000008',MASTER_LOG_POS=107;


5.啟動複製

分別在兩臺伺服器中執行
mysql> start slave;
通過檢視slave狀態檢視設定是否生效
mysql> show slave status\G


6.驗證

分別在兩個伺服器之間建立資料庫,表,插入、刪除資料,看是否能夠同步並按照指定的步長依次增加資料


相關文章