以下說(shuō)的是單向主從復(fù)制。主從復(fù)制是通過(guò)日志同步來(lái)實(shí)現(xiàn)的,主庫(kù)執(zhí)行語(yǔ)句也會(huì)在從庫(kù)得到執(zhí)行,原則上是從庫(kù)只用來(lái)查詢,這樣能確保兩個(gè)數(shù)據(jù)庫(kù)的完全一致。但理論上主從可以建立不同的索引,從數(shù)據(jù)庫(kù)可以建立新表,可以執(zhí)行delete操作,但從數(shù)據(jù)庫(kù)不能update和create,否則主從日志將立即被破壞,要特別注意這點(diǎn)。主從的數(shù)據(jù)庫(kù)版本必須一致。
主從的my.cnf均做如下配置:
server-id = 1 #【必須】主機(jī)標(biāo)示,服務(wù)器唯一ID,整數(shù),可取IP最后一段
log_bin = /var/log/mysql/mysql-bin.log #【必須】開(kāi)啟二進(jìn)制日志bin-log,不同版本的mysql可能不一樣
binlog-do-db = test1 #需要備份數(shù)據(jù),多個(gè)寫多行
binlog-do-db = test2 #需要備份數(shù)據(jù),多個(gè)寫多行
binlog-ignore-db = mysql #不需要備份的數(shù)據(jù)庫(kù),多個(gè)寫多行
重啟mysql服務(wù)生效/etc/init.d/mysql restart
可以通過(guò)show variables like 'log_%'; 驗(yàn)證二進(jìn)制日志是否已經(jīng)啟動(dòng)。
如果主從數(shù)據(jù)庫(kù)都是空的那么不用完成初始同步,否則要先把主服務(wù)器的數(shù)據(jù)同步到從服務(wù)器。
主庫(kù)操作
注意在導(dǎo)出數(shù)據(jù)之前先對(duì)主數(shù)據(jù)庫(kù)進(jìn)行READ LOCK,以保證數(shù)據(jù)的一致性:
flush tables with read lock;
主庫(kù)導(dǎo)出sql文件:
mysqldump -F sync(數(shù)據(jù)庫(kù)名) --host=127.0.0.1 --port=3306 -u root -p536c9a0d2a73afdfbc97dfc9e8c02a89 > /home/sync.sql(生成文件路徑)
得到主服務(wù)器當(dāng)前二進(jìn)制日志名和偏移量,這個(gè)操作的目的是為了在從數(shù)據(jù)庫(kù)啟動(dòng)后,從這個(gè)點(diǎn)開(kāi)始進(jìn)行數(shù)據(jù)的恢復(fù):
show master status \G;
最好在主數(shù)據(jù)庫(kù)備份完畢,恢復(fù)寫操作:
unlock tables;
創(chuàng)建用來(lái)同步的賬號(hào)并授權(quán):
grant REPLICATION SLAVE on *.* to slaveBelongsToMaster(用戶名)@'%' identified by "123456(用戶密碼)";
flush privileges;
一般不用root帳號(hào),“%”表示所有客戶端都可能連,只要帳號(hào),密碼正確,此處可用具體客戶端IP代替,如127.0.0.1,加強(qiáng)安全。
從庫(kù)操作
取出主庫(kù)sql文件寫入:
source /home/sync.sql
配置使用同步賬號(hào):
CHANGE MASTER TO MASTER_HOST='127.x.x.x(主庫(kù)IP)',MASTER_PORT=3306(主庫(kù)端口),MASTER_USER='slaveBelongsToMaster',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003(上面得到的二進(jìn)制日志名)',MASTER_LOG_POS=106(上面得到的二進(jìn)制偏移量);
開(kāi)始主從復(fù)制:
slave start; 或 start slave;
終止主從復(fù)制:
slave stop; 或 stop slave;
從服務(wù)器狀態(tài)
Show slave status \G;
注:Slave_IO及Slave_SQL進(jìn)程必須正常運(yùn)行,即YES狀態(tài),否則都是錯(cuò)誤的狀態(tài)(如:其中一個(gè)NO均屬錯(cuò)誤)。