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