一、雙機熱備的概念簡單說一下,就是要保持兩個數(shù)據(jù)庫的狀態(tài)自動同步。對任何一個數(shù)據(jù)庫的操作都自動應(yīng)用到另外一個數(shù)據(jù)庫,始終保持兩個數(shù)據(jù)庫中的數(shù)據(jù)一致。 這樣做有如下幾點好處:
網(wǎng)站設(shè)計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);網(wǎng)站制作、成都做網(wǎng)站收費合理;免費進行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運營了十多年的創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司。1. 可以做災(zāi)備,其中一個壞了可以切換到另一個。
2. 可以做負載均衡,可以將請求分攤到其中任何一臺上,提高網(wǎng)站吞吐量。 對于異地?zé)醾?,尤其適合災(zāi)備。
二、mysql 主從備份工作原理
簡單的說就是把 一個服務(wù)器上執(zhí)行過的sql語句在別的服務(wù)器上也重復(fù)執(zhí)行一遍, 這樣只要兩個數(shù)據(jù)庫的初態(tài)是一樣的,那么它們就能一直同步。
MYSQL主從同步是在MySQL主從復(fù)制(Master-Slave Replication
)基礎(chǔ)上實現(xiàn)的,通過設(shè)置在Master
上的binlog
,使其處于打開狀態(tài);Slave
通過一個I/O
線程從Master
上讀取binlog
,然后傳輸?shù)?code>Slave的中繼日志中,然后使用SQL
線程讀取中繼日志,并應(yīng)用到自身數(shù)據(jù)庫中,從而實現(xiàn)主從數(shù)據(jù)同步功能。
有兩個服務(wù)器,演示了從一個主服務(wù)器(master)把數(shù)據(jù)同步到從服務(wù)器(slave)的過程。
對于一個mysql服務(wù)器,一般有兩個線程來負責(zé)復(fù)制和被復(fù)制。當(dāng)開啟復(fù)制這個開關(guān)之后(start slave)
1. 作為主服務(wù)器Master,會把自己的每一次改動都記錄到 二進制日志 Binarylog 中。 (從服務(wù)器會負責(zé)來讀取這個log,然后在自己那里再執(zhí)行一遍。)
2. 作為從服務(wù)器Slave,會用master上的賬號登陸到master上,去讀取master的Binarylog, 然后寫入到自己的中繼日志Relaylog,然后自己的sql線程會負責(zé)讀取這個中繼日志,并執(zhí)行一遍。到這里主服務(wù)器上的更改就同步到從服務(wù)器上了。
在mysql上可以查看當(dāng)前服務(wù)器的主,從狀態(tài)。 其實就是當(dāng)前服務(wù)器的 Binary(作為主服務(wù)器角色)狀態(tài)和位置。以及其RelayLog(作為從服務(wù)器)的復(fù)制進度。
三、復(fù)制的過程
該過程的第一部分就是master記錄二進制日志。在每個事務(wù)更新數(shù)據(jù)完成之前,master在二日志記錄這些改變。MySQL將事務(wù)串行的 寫入二進制日志,即使事務(wù)中的語句都是交叉執(zhí)行的。在事件寫入二進制日志完成后,master通知存儲引擎提交事務(wù)。 下一步就是slave將master的binary log拷貝到它自己的中繼日志。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然后開始binlog dump process。Binlog dump process從master的二進制日志中讀取事件,如果已經(jīng)跟上master,它會睡眠并等待master產(chǎn)生新的事件。I/O線程將這些事件寫入中 繼日志。 SQL slave thread(SQL從線程)處理該過程的最后一步。SQL線程從中繼日志讀取事件,并重放其中的事件而更新slave的數(shù)據(jù),使其與master中的數(shù) 據(jù)一致。只要該線程與I/O線程保持一致,中繼日志通常會位于OS的緩存中,所以中繼日志的開銷很小。 此外,在master中也有一個工作線程:和其它MySQL的連接一樣,slave在master中打開一個連接也會使得master開始一個線程。復(fù)制 過程有一個很重要的限制——復(fù)制在slave上是串行化的,也就是說master上的并行更新操作不能在slave上并行操作。
實驗
實驗環(huán)境
server2 master
server3 slave
master上下載包
mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
安裝數(shù)據(jù)庫
[root@server2~]# 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
[root@server3 ~]# yum install -y *
修改mysql的配置文件
[root@server2 ~]# vim /etc/my.cnf
server-id = n | 給服務(wù)器分配一個唯一的ID編號 |
log-bin [= filename] | 把對數(shù)據(jù)進行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二進制格式記入日志(二進制變更日志,binary update log)。這種日志的文件名是filename.n或默認的hostname.n,其中n是一個6位數(shù)字的整數(shù)(日志文件按順序編號)。 |
開啟服務(wù)
修改slave配置文件
server-id = n | 給服務(wù)器分配一個唯一的ID編號 |
[root@server3 ~]# vim /etc/my.cnf
開啟服務(wù)
查看密碼
安全配置向?qū)?/strong>
如下方法修改slave密碼
mysql> alter user root@localhost identified by 'LH=redhat123';
master上進行授權(quán)
mysql> grant replication slave on *.* to cara@'192.168.122.13' identified by 'LH@redhat123' ; 用戶授權(quán)
mysql> flush privileges; 刷新
master授權(quán)后,slave可以遠程登錄
master端查看
使 slave 與 master 建立連接,從而同步:
mysql> change master to master_host='192.168.122.12',master_user='cara',master_password='LH=redhat123',master_log_file='mysql-bin.000003',master_log_pos=1706;
slave端 mysql -p 登錄
查看
[root@server3 mysql]# pwd
/var/lib/mysql
[root@server3 mysql]# cat master.info
[root@server3 mysql]# cat server3-relay-bin.index
mysql> show slave status\G; 查看slave狀態(tài)
mysql> start slave; 開啟slave
創(chuàng)建庫westos,創(chuàng)建表usertb
在表中插入數(shù)據(jù)
更改密碼
刪除表中數(shù)據(jù)
[root@server2 mysql]# mysqlbinlog mysql-bin.000003 可查看master所做的操作
在slave上也可查看master上數(shù)據(jù)
GTID(Global Transaction ID)是對于一個已提交事務(wù)的編號,并且是一個全局唯一的編號。GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL實例的唯一標 識,保存在mysql數(shù)據(jù)目錄下的auto.cnf文件里。TID代表了該實例上已經(jīng)提交的事務(wù)數(shù)量,并且隨著事務(wù)提交單調(diào)遞增。下面是一個GTID的具 體形式:3E11FA47-71CA-11E1-9E33-C80AA9429562:23。
根據(jù)GTID可以知道事務(wù)最初是在哪個實例上提交的
GTID的存在方便了Replication的Failover
更簡單的實現(xiàn)failover,不用以前那樣在需要找log_file和log_Pos。
更簡單的搭建主從復(fù)制。
比傳統(tǒng)復(fù)制更加安全。
GTID是連續(xù)沒有空洞的,因此主從庫出現(xiàn)數(shù)據(jù)沖突時,可以用添加空事物的方式進行跳過。
master更新數(shù)據(jù)時,會在事務(wù)前產(chǎn)生GTID,一同記錄到binlog日志中。
slave端的i/o線程將變更的binlog,寫入到本地的relay log中。
sql線程從relay log中獲取GTID,然后對比slave端的binlog是否有記錄。
如果有記錄,說明該GTID的事務(wù)已經(jīng)執(zhí)行,slave會忽略。
如果沒有記錄,slave就會從relay log中執(zhí)行該GTID的事務(wù),并記錄到binlog。
在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,如果沒有就用全部掃描。
先關(guān)掉slave
修改配置文件/etc/my.cof
master
slave
重啟服務(wù)
更錄數(shù)據(jù)庫,查看
master
slave
change master to master_host='192.168.122.12',master_user='cara',master_password='LH=redhat123',master_auto_position=1;
--------------------------------------------------------------------master端--------------------------------------------------------------------
--------------------------------------------------------------------slave端--------------------------------------------------------------------
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。