1. 程式人生 > >mysql5.7的主從複製,基於GTID複製,並行複製,半同步複製

mysql5.7的主從複製,基於GTID複製,並行複製,半同步複製

一 最簡單的AB主從複製

MySQL之間資料複製的基礎是二進位制日誌檔案(binary log file)。一臺MySQL資料庫一旦啟用二進位制日誌後,其作為master,它的資料庫中所有操作都會以“事件”的方式記錄在二進位制日誌中,其他資料庫作為slave通過一個I/O執行緒與主伺服器保持通訊,並監控master的二進位制日誌檔案的變化,如果發現master二進位制日誌檔案發生變化,則會把變化複製到自己的中繼日誌中,然後slave的一個SQL執行緒會把相關的“事件”執行到自己的資料庫中,以此實現從資料庫和主資料庫的一致性,也就實現了主從複製。

實驗步驟:
1)安裝資料包(server3 server4)

Yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm
mysql-community-common-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm
mysql-community-server-5.7.17-1.el6.x86_64.rpm

2 )安全初始化資料庫
1 首先需要的是開啟資料庫
/etc/init.d/mysqld start
2由於在5.7版本中開啟資料庫時會預設初始化資料庫,也會進行密碼強度檢測等,所以可以檢視日誌檔案找到初始化時生成的隨機碼。
grep password /var/log/mysqld.log
3 重置密碼(注意有強度檢測,最好大於8位且包涵大小寫和特殊字元等)
mysql_secure_installation
下面提供一種忘記密碼的解決辦法:

1編輯vim /etc/my.cnf
最後一行增加
 skip-grant-tables#免密登陸
2 /etc/init.d/mysqld restart
3 mysql 進入資料庫
4 use mysql 
5 update user set authentication_string=PASSWORD("[email protected]") where
user='root'; #更改密碼
6 quit;退出
7 vim /etc/my.cnf  刪除掉免密登陸
8 /etc/init.d/mysqld restart
9  mysql -p 進入資料庫之後還會發現繼續報錯
10 mysql> SET PASSWORD = PASSWORD('
[email protected]
'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show databases -> ; +--------------------+ | Database | +--------------------+| information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql>

這樣mysql就好了

3)主從複製(server4 主 server3 從)
Master 設定
1 vim /etc/my.cnf 增加以下引數
server-id=1
log-bin=mysql-bin
2 mysql -p
3 grant replication slave on . to [email protected]‘172.25.1.%’ identified by ‘[email protected]’;
4 Flush privileges;
5 show master status;
Slave 設定
1 vim /etc/my.cnf
server-id=2
2 登陸資料庫

mysql> change master to
master_host='172.25.1.5',master_user='bleach',master_password='[email protected]',
master_log_file='mysql-bin.000001',master_log_pos=600;
mysql> start slave;
mysql> show slave status\G

4 )進行測試
1)master建立一個james的庫,然後在salve端進行檢視
2 )slave端進行檢視

二 在基於GTID的主從複製
Master端
1)vim /etc/my.cnf 增加以下配置
gtid-mode=on
enforce-gtid-consistency=1
2) /etc/init.d/mysqld restart
3)Mysql -p
4)grant replication slave on . to [email protected]‘172.25.1.%’ identified by
[email protected]’;
5)Flush privileges;
6)show master status;
Slave端
1)mysql -p
2)如果沒有關閉之前的 slave 的話會發生報錯
3)stop slave
4 mysql> change master to
master_host=‘172.25.1.5’,master_user=‘bleach’,master_password=‘[email protected]’,
master_log_file=‘mysql-bin.000001’,master_log_pos=600;
mysql> start slave;
mysql> show slave status\G
三 並行複製
本次實驗是基於GTID的主從複製的基礎上進行的
在slave端
1)編輯vim /etc/my.cnf 檔案增加下面引數
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
2)/etc/init.d/mysqld restart
3 )mysql -p
4)show processlist;
在這裡插入圖片描述
從這可以看出這裡有16個執行緒在wait 一個io執行緒 一個sql執行緒 一個排程執行緒 一個當前的執行緒,可以看出針對之前的非同步複製,假如master端多個執行緒需要傳送,而slave端只能處理一個執行緒,因為binlog日誌是推送的,所有主庫和從庫之間存在一定的延遲。 這樣就會造成很多問題,比如主庫因為磁碟損壞等故障突然崩掉,導致binlog日誌不存在,同時因為延遲binlog還沒有推送到從庫,從庫也就會丟失很多被主庫提交的事物,從而造成主從不一致。而並行複製就是針對此來優化的。
四 半同步複製

在mysql非同步複製的情況下,Mysql Master Server將自己的Binary Log通過複製執行緒傳輸出去以後,Mysql Master Sever就自動返回資料給客戶端,而不管slave上是否接受到了這個二進位制日誌。在半同步複製的架構下,當master在將自己binlog發給slave上的時候,要確保slave的IO_THREAD接收日誌寫入relay-log以後,才會返回資料給客戶端。對比兩種架構:非同步複製對於使用者來說,可以確保得到快速的響應結構,但是不能確保二進位制日誌確實到達了slave上;半同步複製對於客戶的請求響應稍微慢點,但是他可以保證二進位制日誌的完整性。備庫Crash時,主庫會在某次等待超時後,關閉Semi-sync的特性,降級為普通的非同步複製。

本次實驗是基於GTID的主從複製的基礎上進行的
Master: (server2 主 server3從)
1)install plugin rpl_semi_sync_master soname ‘semisync_master.so’; #安裝外掛
2)set global rpl_semi_sync_master_enabled=ON; #開啟半同步
3)show variables like ‘%rpl%’;
在這裡插入圖片描述
Slave:
1)install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
2)set global rpl_semi_sync_slave_enabled=ON; #開啟半同步
3)show variables like ‘%semi%’;
在這裡插入圖片描述
Master端檢視
show status like ‘%rpl_semi_sync%’;
在這裡插入圖片描述
測試:
關閉 slave 關閉端
stop slave io_thread;
在 master 端增加表的值
在這裡插入圖片描述
可以看出由於 slave 端 io 執行緒的關閉,master 端響應 10s 左右
關閉 Semi-sync 的特性,降級為普通的非同步複製
然後我們在 slave 端進行檢視
Start slave io_thread;
Start slave;
在這裡插入圖片描述
發現開啟 io 執行緒之後 slave 立刻複製 master 端的資料過來
再去訪問 master 端就能發現失敗連結次數次數,關閉半同步複製的次數,等待次數
show status like ‘%rpl_semi_sync%’;
在這裡插入圖片描述

相關推薦

mysql5.7主從複製基於GTID複製並行複製同步複製

一 最簡單的AB主從複製 MySQL之間資料複製的基礎是二進位制日誌檔案(binary log file)。一臺MySQL資料庫一旦啟用二進位制日誌後,其作為master,它的資料庫中所有操作都會以“事件”的方式記錄在二進位制日誌中,其他資料庫作為slave通

MySQL5.7主從複製基於GTID主從複製同步、組複製、全同步解析

一、主從複製 1.環境 系統:redhat6.5 防火牆:保持關閉 selinux=disabled mysql主機:server1 172.25.32.4/24 mysql從機:server2 172.25.32.5/24 2.MySQL

mysql5.7主從複製,基於GTID複製,MysqlProxy實現讀寫分離

server10和server11安裝mysql: yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm my

MySQL5.7安裝+基於GTID主從複製+並行複製+增強同步複製+讀寫分離+M-S-S架構(聯級複製

實驗環境: Centos7.2 角色 主機IP server_id 資料狀態 Proxysql 192.168.148.62 nul

mysql 主從複製 基於gtid同步複製並行複製同步複製

一、mysql 主從複製 1.主從形式 mysql主從複製 靈活 一主一從 主主複製 一主多從---擴充套件系統讀取的效能,因為讀是在從庫讀取的; 多主一從---5.7開始支援 聯級複製--- 2.主從複製的用途及部署條件 mysql主從複製用途 實時災備,

mysql主從複製基於gtid主從複製

MySQL複製原理,其通過三個執行緒來完成,在master節點上執行的binlogdump執行緒以及在slave節點上執行的I/O執行緒和SQL執行緒。 1. master節點上的binlogdump執行緒,在slave與其正常連線的情況下,將binlog傳送到slave上。

mysql5.7主從同步複製基於二進位制日誌檔案binary log file)

MySQL資料庫自身提供的主從複製功能可以方便的實現資料的多處自動備份,實現資料庫的拓展。多個數據備份不僅可以加強資料的安全性,通過實現讀寫分離還能進一步提升資料庫的負載效能。 下圖就描述了一個多個數據庫間主從複製與讀寫分離的模型: 在一主多從的資料庫體系中,多個從伺

mysql主從複製基於GTID主從複製並行複製同步複製

複製方式: 主–從複製(A-B一主一從或者A-BC一主多從) 基於GTID複製 非同步複製 半同步複製 複製原理: Mysql中有一種日誌叫做bin日誌(二進位制日誌)。這個日誌會記錄下所有修改了資料庫的SQL語句 主從複製的原理其實就是把主伺服器上的bin日

mysql5.7主從複製延時過大stop slave夯住

# at 1048017045 #170720  7:17:39 server id 56001  end_log_pos 1048017110 CRC32 0x595de4a4       GTID    last_committed=59399    sequence_number=59400 SET @

運維筆記36 mysql的一主多從模型(原始主從複製基於GTID主從複製

概述: mysql的主從複製是十分經典的一個應用,但是主從之間總會有資料一致性(data consistency )的問題,一般情況從庫會落後主庫幾個小時,而且在傳統一主多從(mysql5.6之前)的模型中當master down掉後,我們不只是需要將一個sl

MySQL5.7主從複製配置資料同步

MySQL5.7主主複製配置 主機1IP:172.16.1.206 主機2IP:172.16.1.226 一、首先安裝MySQL 5.7 1、解除安裝兩臺主機系統中已經有的mysql相關軟體包 rpm -qa | grep -i mysql yum remove my

mysql主從複製基於GTID主從同步複製並行複製

環境: 實驗環境: rhel6.5 , selinux和iptables均為disabled狀態,mysql均為5.7.17,或者slave比master版本高 實驗主機: 172.25.254.2 server2:master 172.25.254.3 server3:s

mysql5.7主從複製

安裝環境 作業系統 :CentOS Linux release 7.5.1804 (Core) 資料庫版本:MySQL 5.7.24 主機A:192.168.1.11 (Master) 主機B:192.168.1.12 (Slave) 在Centos下安裝mysql參考:https

Mysql5.7 主從複製 主從(Master/Slave)同步配置

環境: mysql版本都是5.7 主(Master) ubutnu18.04:192.168.199.254 從(Slave) ubutnu18.04:192.168.199.172 兩個mysql要資料相同才可以開啟主從,所以這裡新建一個新的庫來處理主從 testzc Ma

mysql主從複製基於gtid

mysql的主從複製 主伺服器將更新寫入二進位制日誌檔案,並維護檔案的一個索引以跟蹤日誌迴圈。這些日誌可以記錄傳送到從伺服器的更新.當一個從伺服器連線主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主

MySQL主從複製基於GTID及多執行緒

一、Mysql 5.6 複製管理工具 官方下載:http://dev.mysql.com/downloads/tools/utilities/#downloads mysqlreplicate 快速啟動複製 mysqlrplcheck 快速檢查複製環境

MySQL5.7主從複製配置

1 my.cnf檔案 配置   binlog_format = ROW  log_bin_trust_function_creators=1  log-error = /usr/local/mysql/data/hostname.err  log-bin = /usr/local/mysql/arch/my

windows server下Mysql5.7主從複製

 1、說明:MySQL版本:5.7 Master伺服器IP:10.10.12.224,賬號為root,密碼rootSlave伺服器IP:10.10.12.225,賬號為root,密碼root2、Master伺服器配置·        找到Master伺服器MySQL配置檔案m

centOS7.4 mysql5.7 主從複製

一:系統說明:準備兩個centOS7.4 伺服器  A,B 二: 安裝mysql5.71:停到之前的mysql 如果有安裝的解除安裝掉。2: 安裝mysql5.7 三部曲1)  // 指定安裝包路徑並下載    ]# cd usr/local/src     ]# wget 

MySQL5.7同步複製

實驗實現: master:192.168.1.117 slave1:192.168.1.228 slave2:192.168.1.229   一、安裝前提 1、MySQL5.5 版本或更高 2、主、備庫的 have_dynamic_loading 系統變數值為