《Mysql Repliaction技術(shù)入門》要點:
本文介紹了Mysql Repliaction技術(shù)入門,希望對您有用。如果有疑問,可以聯(lián)系我們。
1、Replication可以實現(xiàn)將數(shù)據(jù)從一臺數(shù)據(jù)庫服務(wù)器(master)復(fù)制到一臺到多臺數(shù)據(jù)庫服務(wù)器上(slave);
2、默認情況下,屬于異步復(fù)制,所以無需維持長連接.
簡單來說,master將數(shù)據(jù)庫的改變寫入二進制日志,slave同步這些二進制日志,并根據(jù)這些二進制日志進行數(shù)據(jù)重演操作,實現(xiàn)數(shù)據(jù)異步同步.
MySQL Replication的用途:
1、Fail Over 故障切換;
2、Backup 在線熱備份(機械故障);
3、High Performance 高性能.
MySQL Replication的架構(gòu):
master ---> slave (雙機熱備).
默認情況下,master接受讀寫哀求,slave只接受讀哀求以減輕master的壓力.
復(fù)制過程如下:
1、slave端的IO線程連上master端,執(zhí)行哀求;
2、master端返回給slave端,bin log文件名和位置信息;
3、IO線程把master端的bin log內(nèi)容依次寫到slave端relay bin log里,并把master端的bin-log文件名和位置記錄到master.info里;
4、salve端的sql線程,檢測到relay bin log中內(nèi)容更新,就會解析relay log里更新的內(nèi)容,并執(zhí)行這些操作.
復(fù)制流程
master ---> slave1 -----> slave2 (級聯(lián)架構(gòu))
優(yōu)點: 進一步分擔(dān)讀壓力;
缺點: slave1 出現(xiàn)故障,后面的所有級聯(lián)slave服務(wù)器都會同步失敗.
slave1 <----/master (并聯(lián)架構(gòu))\----> slave2
優(yōu)點:辦理上面的slave1的單點故障,同時也分擔(dān)讀壓力;
缺點:間接增加master的壓力(傳輸二進制日志壓力).
master1 <------> master2 (互為主從).
優(yōu)點:
從命名來看,兩臺master好像都能接受讀、寫哀求,但實際上,往往運作的過程中,同一時刻只有其中一臺master會接受寫哀求,另外一臺接受讀哀求.
目標(biāo):
1、可以降低master讀壓力;
2、可以對數(shù)據(jù)庫做“熱備”,熱備只能辦理硬件master硬件故障,軟件故障等重大故障問題,但無法辦理人為誤操作導(dǎo)致的邏輯故障(例如輸入錯誤的SQL語句把重要的記錄刪除了),所以常規(guī)的備份是必須.
環(huán)境準(zhǔn)備及要求:
1、關(guān)閉防火墻和selinux;
2、hosts文件中兩臺服務(wù)器主機名和ip地址一一對應(yīng)起來;
3、系統(tǒng)時間必要同步;
4、master和slave的數(shù)據(jù)庫版本堅持一致(系統(tǒng)版本堅持一致);
5、master:10.1.1.1 slave:10.1.1.2;
6、此處說明,我本機master端是通過源碼包安裝的mysql5.6.25版本,安裝目錄和數(shù)據(jù)目錄都是自定義的,basedir=/mysql25,datadir=/data/mysql25.slave是直接從我本機master同步過去再初始化的,所以我當(dāng)前環(huán)境是兩臺機上面版本一致的,數(shù)據(jù)庫里面庫和表也是一致的.
思路:
1、master必需開啟二進制日志;
2、slave必需開啟中繼日志;
3、master和slave的server-id必需不一致 2^23-1;
4、master和slave的初始數(shù)據(jù)一致.
具體步驟:
1、修改配置文件(master和slave);
master:
[mysqld]
basedir=/mysql25
datadir=/data/mysql25
port=3307
socket=/mysql25/mysql.sock
log-bin=/var/lib/mysql/mysqld-bin --master必需開啟二進制日志
server-id=100 --mysql數(shù)據(jù)庫的編號,master和slave必需不一樣
slave:
[mysqld]
basedir=/mysql25
datadir=/data/mysql25
port=3307
socket=/mysql25/mysql.sock
log-bin=/mysql56/mysqld-bin --slave上的二進制日志可以開啟也可以不開啟,看具體情況
server-id=200 --mysql數(shù)據(jù)庫的編號
relay-log=/mysql56/relay-log --主從復(fù)制日志必要開啟
2、初始化數(shù)據(jù),使兩邊數(shù)據(jù)一致(以master為主);
此處省略,因為上面環(huán)境介紹那里已經(jīng)說明了我的數(shù)據(jù)是一致的.
3、master端創(chuàng)建授權(quán)用戶;
mysql> grant replication slave on *.* to 'slave'@'10.1.1.%' identified by '123';
mysql> flush privileges;
4、查看master的正在寫的二進制文件名和位置;
mysql> flush tables with read lock; --先加鎖,防止兩邊數(shù)據(jù)不一致;如果業(yè)務(wù)還未上線,這個就沒有需要了
Query OK, 0 rows affected (0.00 sec)
mysql> show master status; --只有打開二進制日志,這句命令才有結(jié)果,表現(xiàn)當(dāng)前數(shù)據(jù)庫的二進制日志寫到什么位置
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 331 | | | --二進制文件名 正在寫入的位置
+------------------+----------+--------------+------------------+
5、slave端設(shè)定復(fù)制信息;
mysql> change master to
-> master_host='10.1.1.20', --master ip
-> master_user='slave', --同步用戶(這里都是上面第三步創(chuàng)建的用戶和授權(quán)暗碼)
-> master_password='123', --暗碼
-> master_port=3306, --端口
-> master_log_file='mysqld-bin.000001', --master主上面查到到二進制日志名
-> master_log_pos=331; --主上面查到的位置號
6、啟動復(fù)制線程,開始同步;
mysql> start slave;
mysql> show slave status G;
Slave_IO_Running: Yes --代表成功連接到master而且下載日志
Slave_SQL_Running: Yes --代表成功執(zhí)行日志中的SQL語句
--回到master端解鎖:
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
7、測試驗證;
master寫——>slave可以看到
slave寫——>master看不到
在上述架構(gòu)下實現(xiàn)故障遷移和恢復(fù)
故障遷移:
1、模擬master出現(xiàn)故障;
2、查看slave同步狀態(tài)并停止向master同步數(shù)據(jù):
slave > show slave status G;
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Last_IO_Error: error reconnecting to master 'slave@10.1.1.2:3307' - retry-time: 60 retries: 1
mysql> stop slave; --停止
3、master故障之后,前端的應(yīng)用應(yīng)該把讀寫哀求都調(diào)度給slave:
r/w
X |
master slave
直接用客戶端登錄slave,對數(shù)據(jù)進行修改,模擬寫操作:
mysql> use db2;
mysql> insert into t1 set id=2;
mysql> insert into t1 set id=3;
mysql> use db1;
mysql> update t1 set name='test' where id=3;
故障修復(fù):
可以肯定的是,在這個架構(gòu)下,master要上線,肯定只有一個選擇,便是作為原有slave的從,重新上線;
主 從
slave ---> master
情況:
假設(shè)數(shù)據(jù)已經(jīng)損害了、丟失了,那么最簡單的辦法就是重裝master數(shù)據(jù)庫,把master作為slave的從,原來的slave就變成新架構(gòu)的master.
注意:
確保新的架構(gòu)復(fù)制成功之后,回到slave服務(wù)器,把數(shù)據(jù)目錄下的master.info文件刪除,不然的話,下次如果slave重啟數(shù)據(jù)庫服務(wù),會自動連接master:slave IO線程把master端的bin log內(nèi)容依次寫到slave端relay bin log里,并把master端的bin-log文件名和位置記錄到master.info里.
《Mysql Repliaction技術(shù)入門》是否對您有啟發(fā),歡迎查看更多與《Mysql Repliaction技術(shù)入門》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7069.html