一、說明
這裏準備了兩臺機器。機器1:192.168.224.128,機器2:192.168.224.129
MySQL版本:5.7.30,這裏不提供安裝教程,理論上只要版本對,以下步驟能適用任何安裝方式。
這裏不提供原理的相關資料,有需要請自行查找資料。
二、目的
同步複製耗時長,異步複製存在數據不一致的風險,由於業務追求高效,又不能容忍數據風險,於是乎,只能上半同步複製。
三、完整支持UTF-8字符集的配置
在my.ini文件中,在合適的位置添加如下配置,這不是必要的配置,可按需選擇。兩臺機器下做同樣的配置。
[client]
#完整支持UTF-8字符集的配置
default-character-set=utf8mb4
[mysql]
#完整支持UTF-8字符集的配置
default-character-set=utf8mb4
[mysqld]
#完整支持UTF-8字符集的配置
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
四、基本配置
配置半同步複製前,需要先配置好基本複製配置。
1、機器1的my.ini文件的基本配置
#主從基礎配置
#配置bin log位置,會在MySQL的目錄下保存,如下,請先創建bin-log文件夾,否則服務無法啓動
log-bin=../bin-log/bin-log-128
#一般做成IP地址最後一段
server-id=128
#配置需要複製的庫
binlog-do-db=test_db
binlog-do-db=test
2、機器2的my.ini文件的基本配置
#主從基礎配置
#配置bin log位置,會在MySQL的目錄下保存,如下,請先創建bin-log文件夾,否則服務無法啓動
log-bin=../bin-log/bin-log-129
#一般做成IP地址最後一段
server-id=129
#配置需要複製的庫
binlog-do-db=test_db
binlog-do-db=test
3、重啓MySQL服務
兩臺機器都要重啓。如果沒意外,可在bin-log文件夾下看到log文件。
五、Slave用戶的創建
打開MySQL命令行界面,用root登錄執行如下命令。機器1和機器2都執行。可替換自己需要的賬號和密碼。
CREATE USER 'test'@'192.168.%' IDENTIFIED BY '123456';#創建用戶, 用戶名:test,允許內部IP上登錄
GRANT REPLICATION SLAVE ON *.* TO 'test'@'192.168.%';#分配權限
flush privileges; #刷新緩存
六、主從雙向關聯
1、機器2做Slave,機器1做Master
在機器1上用root登錄並執行如下腳本,獲取Master相關信息。
show master status;
在機器2上用root登錄並執行如下腳本,配置機器1爲Master。
change master to master_host='192.168.224.128';
change master to master_user='test';
change master to master_password='123456';
change master to master_log_file='bin-log-128.000001'; #替換爲上圖對應的值
change master to master_log_pos=154; #替換爲上圖對應的值
start slave;
2、機器1做Slave,機器2做Master
在機器2上用root登錄並執行如下腳本,獲取Master相關信息。
show master status;
在機器1上用root登錄並執行如下腳本,配置機器2爲Master。
change master to master_host='192.168.224.129';
change master to master_user='test';
change master to master_password='123456';
change master to master_log_file='bin-log-129.000001'; #替換爲上圖對應的值
change master to master_log_pos=763; #替換爲上圖對應的值
start slave;
3、驗證配置是否成功
在機器1和機器2上執行如下命令,看打印出來的內容。
show slave status \G;
如果Slave_IO_Running和Slave_SQL_Running都爲Yes,證明配置成功。
5、驗證雙向複製是否成功
在機器1和機器2上創建數據庫,表,新增數據,驗證數據是否能成功複製到另一臺機器上。
七、半同步複製配置
1、插件安裝
分別在機器1和機器2上執行如下腳本。
#安裝半同步複製的插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll'; #Linux系統請將.dll改爲.so
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.dll'; #Linux系統請將.dll改爲.so
執行完後可以查詢插件列表是否安裝成功。
#查詢插件
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%semi%';
2、插件配置
分別在機器1和機器2的my.ini文件上追加如下配置。
#半同步複製的配置
plugin-load="rpl_semi_sync_master=semisync_master.dll;rpl_semi_sync_slave=semisync_slave.dll;" #MySQL啓動時加載插件
rpl-semi-sync-master-enabled = 1 #啓用Master半同步複製插件
rpl_semi_sync_master_timeout=5000 #超時時間:5秒
rpl-semi-sync-slave-enabled = 1 #啓用Slave半同步複製插件
然後分別重啓MySQL服務。
3、驗證插件安裝是否成功
重啓完後可以查看插件配置:
#查詢變量
show variables like '%semi%';
看到ON和AFTER_SYNC,表示達到目的。
查看插件狀態:
#查詢狀態
show status like '%semi%';
親切的ON。
八、負載均衡
既然數據能雙向複製,那麼可以在機器1和機器2上部署相同的業務工程,用本機上的MySQL服務,然後對業務工程做負載均衡即可。不過只限兩臺機器的情況,多了還是得上Group Replication或InnoDB Cluster。
參考文檔:https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html