實現MySQL半同步架構
阿新 • • 發佈:2018-03-29
MySQL半同步架構默認情況下,MySQL的復制功能是異步的,異步復制可以提 供最佳的性能,主庫把binlog日誌發送給從庫即結束,並不驗 證從庫是否接收完畢。這意味著當主服務器或從服務器端發生 故障時,有可能從服務器沒有接收到主服務器發送過來的 binlog日誌,這就會造成主服務器和從服務器的數據不一致, 甚至在恢復時造成數據的丟失。
而半同步架構就是什麽工作機制呢?當用戶寫數據時master服務器會馬上把數據復制到一臺slave服務器上,才會提示用戶寫入成功。而後再慢慢把數據復制到其他的slave服務器上,這樣的好處就是可以提高數據安全性,和容錯性
而半同步架構就是什麽工作機制呢?當用戶寫數據時master服務器會馬上把數據復制到一臺slave服務器上,才會提示用戶寫入成功。而後再慢慢把數據復制到其他的slave服務器上,這樣的好處就是可以提高數據安全性,和容錯性
實現方法:
一,配置master服務器
1,修改主配置文件
vim /etc/my.cnf 在[mysql]配置塊下添加如下兩行配置 [mysql] log_bin #開啟二進制日誌功能 server_id=1 #為當前節點設置一個全局惟一的ID號 innodb_file_per_table #數據於表結構分離,存放在兩個不同文件
2,重啟mysql服務,使配置生效
systemctl restart mairadb
3,創建有復制權限的用戶賬號
登入mysql終端執行 GRANT REPLICATION SLAVE ON *.* TO ‘repluser‘@‘HOST‘ IDENTIFIED BY ‘replpass‘; 命令解析: ‘repluser‘@‘HOST‘ :設置用戶名即主機ip或網段,網段用%表示 例如10.0.0.% IDENTIFIED BY:設置密碼 *.* :表示所有數據庫,所有表 GRANT REPLCATION SLAVE:就是允許該用戶復制數據 該命令作用就是授權repluser能拷貝數據庫的所有內容
4,在master裝一個插件"semisync_master.so",這個插件mariadb默認就有
登入mysql終端執行 1,安裝插件 INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘; 2,加載插件 SET GLOBAL VARIABLES rpl_semi_sync_master_enabled=1; 3,查看狀態 SHOW GLOBAL VARIABLES LIKE ‘%semi%‘; rpl_semi_sync_master_enabled ON #NO表示開啟半同步功能,OFF表示關閉 rpl_semi_sync_master_timeout 10000 #超時時間微秒為單位 rpl_semi_sync_master_trace_level 32 rpl_semi_sync_master_wait_no_slave ON
二,作為半同步的slave配置
1,修改配置文件
vim /etc/my.cnf
在[mysql]配置塊中添加如下兩行配置
[mysqld]
server_id=3 #為當前節點設置一個全局惟一的ID號
read_only=ON #限制從服務器為只讀."註意:此限制對擁有SUPER權限的用戶均無效"
innodb_file_per_table #數據於表結構分離,存放在兩個不同文件
2,重啟mysql服務,使配置生效
systemctl restart mariadb
3,登入mysql終端安裝插件"semisync_slave.so"
1,安裝插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;
2,加載插件
SET GLOBAL rpl_semi_sync_slave_enabled=1;
3,查看狀態
SHOW GLOBAL VARIABLES LIKE ‘%semi%‘;
rpl_semi_sync_slave_enabled ON
rpl_semi_sync_slave_trace_level 32
3,使用有復制權限的用戶賬號連接至主服務器,並啟動復制線程
CHANGE MASTER TO
MASTER_HOST=‘master_host‘, #指定中繼master主機IP
MASTER_USER=‘repluser‘, #指定master被授權的用戶名
MASTER_PASSWORD=‘replpass‘,#指定被master授權的用戶密碼 MASTER_LOG_FILE=‘mysql-bin.xxxxx‘, #指定master服務器的哪個二進制日誌開始復制
MASTER_LOG_POS=#; #二進制日誌位置,可以在master服務器上執行該命令查看,show master logs;
啟動復制線程IO_THREAD和SQL_THREAD
START SLAVE;
4,查看slave服務器線程狀態
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.68.17
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000001
Read_Master_Log_Pos: 557
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 843
Relay_Master_Log_File: mariadb-bin.000001
Slave_IO_Running: Yes "重點關註如果是NO表示線程沒起來"
Slave_SQL_Running: Yes "重點關註 如果是NO表示該線程沒起來"
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 557
Relay_Log_Space: 1139
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0 "該項表示同步時間 0表示即使同步"
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
總結:
半同步與主從架構基本相似就是就差在一個插件上
實現MySQL半同步架構