前面學完了JDBC,接下來帶大家感受一下MySQL集群!其實什么是MySQL集群?簡單的說就是一群機器(服務器)的集合,它們連在一起來工作。
其實各種數據庫都有自己的集群,常常的多:
我們要學習的就是MySQL Replication
一、配置mysql主從模式的原因
1)Mysql內建的復制功能是構建大型、高性能應用程序的基礎。在實際企業應用環境當中,單台mysql數據庫是不足以滿足日后業務需求的。
譬如當服務器發生故障,而沒有備份服務器來提供服務時,業務就必須得停止,這樣會對企業帶來巨大的損失。
2)為了提高數據庫服務器的穩定性,加快數據處理的效率,保護數據免受意外的損失,我們采用mysql的主從復制方式,分離對數據庫的查詢和更新操作,使用從服務器上備份的數據保證來數據的安全性和穩定性。
二、Mysql主從復制的原理
1)MySQL 的 Replication 是一個異步的復制過程,從一個 MySQL instace(我們稱之為 Master)復制到另一個MySQL instance(我們稱之 Slave)。
在 Master 與 Slave 之間的實現整個復制過程主要由三個線程來完成,其中兩個線程(Sql 線程和IO 線程)在 Slave 端,另外一個線程(IO 線程)在 Master 端。
2)在執行這個主從復制之前,首先必須打開 Master 端的Binary Log(MySQL-bin.xxxxxx)功能,否則無法實現。
在啟動 MySQL Server 的過程中使用“log-bin” 參數選項
在 my.cnf 配置文件中的 MySQLd 參數組中增加“log-bin” 參數項
三、Mysql主從復制的過程
3.1、主從復制詳細過程
1) Slave 上面的IO 線程連接上 Master,並請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內容。
2) Master 接收到來自 Slave 的 IO 線程的請求后,通過負責復制的 IO 線程根據請求信息讀取指定日志指定位置之后的日志信息,返回給 Slave 端的 IO 線程。
返回信息中除了日志所包含的信息之外,還包括本次返回的信息在 Master 端的 Binary Log 文件的名稱以及在 BinaryLog 中的位置。
3)Slave 的 IO 線程接收到信息后,將接收到的日志內容依次寫入到 Slave 端的RelayLog (中繼日志文件)文件(MySQL-relay-bin.xxxxxx)的最末端,並將讀取到的Master 端的bin-log 的文件名和位置記錄到master-info 文件中,
以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log 的哪個位置開始往后的日志內容,請發給我” 。
4)Slave 的 SQL 線程檢測到 Relay Log 中新增加了內容后,會馬上解析該 Log 文件中的內容成為在 Master 端真實執行時候的那些可執行的 Query 語句,並在自身執行這些 Query。
這樣,實際上就是在 Master 端和 Slave 端執行了同樣的 Query,所以兩端的數據是完全一樣的。
3.2、Mysql主從復制過程的圖形表示
四、MySQL支持的復制類型與MySQL復制應用類型
4.1、MySQL支持的復制類型
1)基於語句的復制statement: 在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。MySQL默認采用基於語句的復制,效率比較高。一旦發現沒法精確復制時,會自動選着基於行的復制。
2)基於行的復制row:把改變的內容復制過去,而不是把命令在從服務器上執行一遍. 從mysql5.0開始支持
3)混合類型的復制mixed: 默認采用基於語句的復制,一旦發現基於語句的無法精確的復制時,就會采用基於行的復制。
4.2、MySQL復制應用類型
1)數據分布 (Data distribution )
2)負載平衡(load balancing)
3)讀寫分離(split reading and writting)
4)高可用性和容錯性 (High availability and failover )
五、MySQL(主從復制)集群配置過程
環境:
首先我虛擬機中安裝了三台ubuntu操作系統:
ubuntu的server版:1.0.0.3==server1
ubuntu的desktop版(兩台):1.0.0.5=udzyh1。1.0.0.6=udzyh2
注意搭建MySQL集群的時候,MySQL的版本盡量一致,大版本必須一致。(本人使用5.7.19)
5.1、主節點配置(server1,1.0.0.3)
1)首先進入到MySQL的配置文件中去
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2)修改、保存退出
[client] [mysqld] #bind-address=0.0.0.0 server-id=11 log-bin=mysql-bin-11 binlog-format=row
3)重啟MySQL服務 sudo service mysql restart
5.2、從節點配置(1.0.0.5=udzyh1、1.0.0.6=udzyh2)
注意:所有從節點的配置都一模一樣(主從復制,只能有一個主節點,可以用n多個從節點)
1)首先進入到MySQL的配置文件中去
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2)修改、保存退出
[mysqld] #bind.... server-id=12 relay-log=mysql-relay-12
3)重啟MySQL服務 sudo service mysql restart
5.3、連接
1)在主節點的MySQL終端執行:
grant replication slave,replication client on *.* to 'zyh'@'%' identified by '123456';(在主節點創建一個用戶)
2)查看主節點的二進制文件名和插入位置
show master stauts \G
3)在從節點的MySQL終端執行
change master to master_host='1.0.0.3',(這里最好使用ip,其實寫主機的也是可以的,但是一個局域網內主機名很多相同的話,會找不到) master_port=3306, master_user='zyh', master_password='123456', master_log_file='mysql-bin-11.000002', master_log_pos=1326;
注意:n多個從節點都是相同的配置
3)查看從節點的狀態
show slave status \G
5.4、開啟主從復制
start slave
1)查看所有數據庫
在主節點中:
在從節點中:
1)2)
2)主節點創建一個數據庫db_love在查看其它兩個從節點,你會發現驚喜
六、Replication管理和排錯
1)show master status ; 查看master的狀態, 尤其是當前的日志及位置
2)show slave status; 查看slave的狀態.
3)reset slave ; 重置slave狀態,用於刪除SLAVE數據庫的relaylog日志文件,並重新啟用新的relaylog文件.會忘記 主從關系,它刪除master.info文件和relay-log.info 文件
4)start slave ; 啟動slave 狀態(開始監聽msater的變化)
5)stop slave; 暫停slave狀態;
6)set global sql_slave_skip_counter = n 跳過導致復制終止的n個事件,僅在slave線程沒運行的狀況下使用
覺得不錯的點個“推薦”哦!