=Start=
緣由:
工作需要,學習需要。
本文:
MySQL的主從架構:
由一個MySQL執行個體作為主庫,接受讀寫請求,另外一個或多個MySQL執行個體通過MySQL的複製機制,將主庫的資料同步到從庫,從庫會設定唯讀,防止主從資料不一致。
主從架構的好處:
如果主伺服器出現問題,可以快速切換到從伺服器提供服務;
可以在從伺服器上執行查詢,降低主伺服器的壓力;
可以在從伺服器上執行備份,以避免備份期間影響主伺服器的效能。
主從架構的局限:
由於MySQL實現的是非同步複製,所以主從伺服器之間的資料存在一定差異(延遲),對即時性要求高的資料仍然需要從主伺服器上獲得。
主從搭建步驟:
Step
主庫(Master)
從庫(Slave)
1
修改主庫my.cnf設定檔,然後 需要重啟生效
[mysqld]
#作為主庫
#啟動二進位檔案(*)
log-bin=mysql-bin
#伺服器ID(*)
server-id=1
#需要備份的資料庫,多個寫多行
binlog-do-db=orders
#不需要備份的資料庫,多個寫多行
binlog-ignore-db=mysql
修改從庫my.cnf設定檔,然後 需要重啟生效
[mysqld]
#作為從庫(如果有多個從庫,在各自的my.cnf中的server-id需要各不相同)
server-id=2
replicate-do-db=bash #只複製某個庫,多個寫多行
replicate-ignore-db=mysql #不複製某個庫,多個寫多行
replicate-ignore-db=test
replicate-ignore-db=information_schema
2 建立從庫用於串連主庫的帳號(repl)
mysql> GRANTREPLICATIONSLAVEON *.* TO 'repl'@'slave_ip' IDENTIFIEDBY 'password';
mysql> flushprivileges;
使用剛建立的 repl 賬戶在Slave所在主機上登入Master,測試用於複製的賬戶是否可以串連上
mysql -h master_ip -u repl -p
3 記錄同步點
mysql> FLUSHTABLESWITHREADLOCK; //若要同步的資料庫中已經有資料,還需要先用該語句鎖定資料庫
mysql> SHOWMASTERSTATUS; //查看Master狀態,記錄File和Position兩個資訊
4
將主庫資料做邏輯備份或物理備份
mysql> flushtableswithreadlock;
shell> mysqldump -uroot -p --all-databases --master-data > backup.sql
shell> scp -C backup.sqluser@slave_ip:/tmp/
mysql> unlocktables;
5 在從庫上恢複資料
shell> mysql -uroot -p </tmp/backup.sql
shell> rm -rf /tmp/backup.sql
6
以root身份登入從庫,並在從庫上設定主庫的相關資訊(host、port、user等等)
mysql> CHANGEMASTERTO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
mysql> STARTSLAVE; //啟動主從複製
mysql> SHOWSLAVESTATUS\G //查看slave狀態
7 一切順利的話,到這裡,Master上的操作會被同步到Slave上。
在主庫建立test_tb表,類比資料庫新增資料
mysql> create table test_tb(id int,name varchar(30)); 在從庫查看是否存在test_tb表
mysql> show tables;