MySQL5.7主從複製-半同步複製搭建

jichengjie發表於2018-04-14
兩臺伺服器,系統是Redhat6.5,MySQL版本是5.7.18。
1、開啟主庫和從庫的MySQL服務,然後安裝外掛,半同步複製外掛在目錄/usr/local/mysql/lib/plugin下
在主庫安裝semisync_master.so外掛:

點選(此處)摺疊或開啟

  1. mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
  2. Query OK, 0 rows affected (0.02 sec)
  3. mysql> set global rpl_semi_sync_master_enabled=ON;
  4. Query OK, 0 rows affected (0.04 sec)
在從庫安裝semisync_slave.so外掛:

點選(此處)摺疊或開啟

  1. mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
  2. Query OK, 0 rows affected (0.02 sec)
  3. mysql> set global rpl_semi_sync_slave_enabled=ON;
  4. Query OK, 0 rows affected (0.00 sec)
注意:初次載入外掛後,MySQL會將該外掛記錄到系統表mysql.plugin中,下次啟動時系統會自動載入該外掛。
2、在my.cnf配置檔案里加入以下配置:
rpl-semi-sync-master-enabled = 1  
rpl-semi-sync-slave-enabled = 1

master上主要的四個引數:
rpl_semi_sync_master_enabled=ON:表示在master上已經開啟半同步複製模式。
rpl_semi_sync_master_timeout=10000:該引數預設為10000毫秒,即10秒,可以調整,表示如果主庫在某次事務中等待事件超過10秒,則降級為非同步複製模式,不再等待slave,如果master探測到slave恢復,則會自動回到半同步模式。
rpl_semi_synv_master_wait_no_slave:表示是否允許master每個事務提交後都要等待slave的確認訊號,預設是ON,即每一個事務都會等待,如果是OFF,則slave追趕上之後,也不會回到半同步模式。
rpl_semi_sync_master_trace_level=32:表示開啟半同步複製模式時的除錯級別,預設是32。

slave上主要的兩個引數:
rpl_semi_sync_slave_enabled=ON:表示在slave上開啟半同步複製模式。
rpl_semi_sync_slave_trace_level=32:表示開啟半同步複製模式時的除錯級別,預設是32。

3、在主庫上,建立複製使用的使用者,並授予replication slave許可權。這裡建立使用者repl,可以從IP為10.10.10.210的主機進行連線。
grant replication slave on *.* to 'repl'@'10.10.10.210' identified by 'mysql';

4、修改主伺服器配置,加入如下配置:
cat /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
log-bin-index=mysql-bin.index
binlog_format=mixed

5、在主庫上,設定讀鎖,確保沒有資料操作,獲得一個一致性的快照
flush tables with read lock;

6、然後在主庫上獲得當前二進位制日誌名和偏量值,改操作的目的是從庫啟動之後,從這個點開始恢復資料。

點選(此處)摺疊或開啟

  1. mysql> show master status;
  2. +------------------+----------+--------------+------------------+-------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +------------------+----------+--------------+------------------+-------------------+
  5. | mysql-bin.000006 | 120 | | | |
  6. +------------------+----------+--------------+------------------+-------------------+
7、利用mysqldump匯出資料,複製至從庫伺服器。

8、主庫備份完成,恢復寫操作
unlock tables;

9、修改從庫的配置檔案,新增如下引數,注意server-id必須是唯一的,不能和主庫相同,多個從庫的話,server-id不能有重複。
cat /etc/my.cnf
[mysqld]
server-id=2

10、在從庫上,使用--skip-slave-start啟動資料庫,這樣不會立即啟動從庫上的複製程式,方便我們進行下一步配置。
./bin/mysqld_safe --skip-slave-start &

11、對從庫進行配置,指定複製使用的使用者,主庫的IP、埠以及開始執行復制的日誌檔案和位置等:
change master to
master_host='10.10.10.200',
master_port=3306,
master_user='repl',
master_password='mysql',
master_log_file='mysql-bin.000006',
master_log_pos=120;

12、在從庫上啟動slave執行緒
start slave;

13、驗證半同步模式是否開始工作
在master上檢視狀態:

點選(此處)摺疊或開啟

  1. mysql> show status like '%semi%';
  2. +--------------------------------------------+-------+
  3. | Variable_name | Value |
  4. +--------------------------------------------+-------+
  5. | Rpl_semi_sync_master_clients | 1 |
  6. | Rpl_semi_sync_master_net_avg_wait_time | 0 |
  7. | Rpl_semi_sync_master_net_wait_time | 0 |
  8. | Rpl_semi_sync_master_net_waits | 0 |
  9. | Rpl_semi_sync_master_no_times | 0 |
  10. | Rpl_semi_sync_master_no_tx | 0 |
  11. | Rpl_semi_sync_master_status | ON |
  12. | Rpl_semi_sync_master_timefunc_failures | 0 |
  13. | Rpl_semi_sync_master_tx_avg_wait_time | 0 |
  14. | Rpl_semi_sync_master_tx_wait_time | 0 |
  15. | Rpl_semi_sync_master_tx_waits | 0 |
  16. | Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
  17. | Rpl_semi_sync_master_wait_sessions | 0 |
  18. | Rpl_semi_sync_master_yes_tx | 0 |
  19. | Rpl_semi_sync_slave_status | OFF |
  20. +--------------------------------------------+-------+
在slave上檢視狀態:

點選(此處)摺疊或開啟

  1. mysql> show status like '%semi%';
  2. +--------------------------------------------+-------+
  3. | Variable_name | Value |
  4. +--------------------------------------------+-------+
  5. | Rpl_semi_sync_master_clients | 0 |
  6. | Rpl_semi_sync_master_net_avg_wait_time | 0 |
  7. | Rpl_semi_sync_master_net_wait_time | 0 |
  8. | Rpl_semi_sync_master_net_waits | 0 |
  9. | Rpl_semi_sync_master_no_times | 0 |
  10. | Rpl_semi_sync_master_no_tx | 0 |
  11. | Rpl_semi_sync_master_status | OFF |
  12. | Rpl_semi_sync_master_timefunc_failures | 0 |
  13. | Rpl_semi_sync_master_tx_avg_wait_time | 0 |
  14. | Rpl_semi_sync_master_tx_wait_time | 0 |
  15. | Rpl_semi_sync_master_tx_waits | 0 |
  16. | Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
  17. | Rpl_semi_sync_master_wait_sessions | 0 |
  18. | Rpl_semi_sync_master_yes_tx | 0 |
  19. | Rpl_semi_sync_slave_status | ON |
  20. +--------------------------------------------+-------+
14、在master透過DDL和DML操作進行同步效果驗證。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26870952/viewspace-2152947/,如需轉載,請註明出處,否則將追究法律責任。

相關文章