在 MySQL5.5以前, MySQL的複製是異步操做,主庫和從庫的數據之間存在必定的延遲,這樣存在一個隱患:當在主庫上寫人一個事務並提交成功,而從庫還沒有獲得主庫推送的 Binlog日誌時,主庫宕機了,例如主庫可能因磁盤損壞、內存故障等形成主庫上該事務 Binlog丟失,此時從庫就可能損失這個事務,從而形成主從不一致。html
半同步複製與異步複製的安裝區別:半同步複製須要安裝建立mysql
show variables like 'log_bin'sql
剛開始是關閉(off)的,在如下配置完成後,會自動打開數據庫
(1)首先,判斷 MySQL服務器是否支持動態增長插件:服務器
mysql> select @@have_dynamic_loading;異步
2)確認支持動態增長插件後,檢查 MySQL(mysql5.6及以上均存在 )的安裝目錄下是否存在插件:測試
一:安裝插件:spa
在主庫上安裝插件semisync_master.so:插件
mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';線程
從庫上則安裝 semisync_slave.so插件:
mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
安裝完成後,從 plugin表中可以看到剛纔安裝的插件
mysql> select * from mysql.plugin;
3)須要分別在主庫和從庫上配置參數打開半同步semi-sync,默認半同步設置是不打開的,主庫上配置全局參數:
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=30000;
show variables like '%rpl_semi_sync_master%';
從庫上同樣配置全局參數:
mysql> set global rpl_semi_sync_slave_enabled=1;
show variables like '%rpl_semi_sync_slave_enabled%';
二:異步主從複製配置
一、確保主從庫安裝了相同版本的數據庫。
二、在主庫上,設置一個複製使用的帳戶,並授予 REPLICATION SLAVE權限。這裏建立一個複製用戶repl,能夠從IP爲172.17.0.2(從庫IP)的主機進行鏈接:
命令文本:
GRANT REPLICATION SLAVE ON *.* To 'rep1'@'172.17
三、修改主數據庫服務器的配置文件 my.cnf,開啓 BINLOG,並設置 server-id的值。這兩個參數的修改須要從新啓動數據庫服務才能夠生效
# 尋找MySQL的配置文件 my.cnf find / -name my.cnf
vi /etc/my.cnf
server-id = 1 #惟一,不能和主數據庫的配置相同,若是有多個從數據庫服務器,每一個從數據庫服務器必須有本身惟一的 server-id值
log-bin = mysql-bin #開啓BINLOG 二進制日誌
# 主數據庫從新啓動
mysql service mysqld restart
四、SHOW MASTER STATUS; # 主數據庫查看狀態
五、# 尋找從庫MySQL的配置文件
my.cnf find / -name my.cnf
vi /etc/my.cnf
server-id=2
六、重啓從庫mysql服務
mysql service mysqld restart
七、對從數據庫服務器作相應設置,指定複製使用的用戶,主數據庫服務器的IP、端口
以及開始執行復制的日誌文件和位置等,參考代碼以下:
mysql> CHANGE MASTER TO
->MASTER_HOST=master host name
->MASTER_USER=replication_user_name
-> MASTER PASSWORD=replication_password
->MASTER_LOG_FILE='recorded_log_file_name
->MASTER_LOG_POS=recorded _log_position
舉例說明以下:
CHANGE MASTER TO MASTER_HOST='172.17.0.3',MASTER_PORT=3306,MASTER_USER='rep1',MASTER_PASSWORD='1234test' ,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=527;
八、在從庫上,啓動 slave同步線程
start slave;
九、# 從庫查看狀態
show slave status\G;
當Slave_IO_Running和Slave_SQL_Running都爲YES的時候,表示主從複製配置成功了。
slave上執行 show processlist\G 命令將顯示相似以下的進程:
十、在master上執行 show processlist\G命令將顯示相似以下的進程:
13測試:
在主庫上新建數據庫和表,並插入數據,看看從庫中是否會自動建立相關的數據庫和表、插入數據。
CREATE TABLE student (id int,name varchar(20));