=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;