一、主從
一主多從時,主伺服器上必須啟用多個binlogdump線程,來對多個從伺服器發起binlog event dump,同時主伺服器來得面臨,前端衆多用戶端發起的寫操作。
主伺服器壓力很大,若挂了,從還能讀不能寫了,業務不能工作了,這樣就催生了雙主模型。雙主模型下連上多個從也可以。
但雙主模型會導緻資料部不一緻。
在一從多主模型下,本身主的壓力很大(client+dump),可以減少dump線程個數來減輕
主的壓力,在這種情況下,可以使用多級複制。可能導緻三級資料同步慢。将二級存儲引擎改為blackhole,本地不儲存資料,僅僅生成二進制日志,這樣的伺服器叫中繼伺服器。
中繼伺服器僅僅用來減輕主的壓力。
一主多從時,可以專門使用一台從伺服器進行冷備。
複制能取代備份嗎?
不可以,例如drop database類誤操作,任何一個伺服器都無法挽回,隻能
通過備份重導資料。 (和raid無法取代備份時一樣的)
多級複制:主-->從(主)-->從-->...
中間伺服器:同時啟用中繼日志(i/o thread)、二級制日志(SQL thread)
二、雙主配置簡述
MySQL内置實作雙主,有很大風險,會導緻資料不一緻;
若不一緻,需手動修護;
1)、在兩台伺服器上各自建立一個具有複制權限的使用者;
2)、修改配置檔案(先備份):
主伺服器A上
[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
auto-increment-offset = 1
auto-increment-increment = 2
skip_slave_start
mysql從伺服器隻要有設定,若重新開機,會自動将程序設定為從伺服器,啟動從 線程,設定skip_slave_start跳過。
# 主伺服器B上
[mysqld]
server-id = 20
log-bin = mysql-bin
relay-log = relay-mysql
auto-increment-increment = 2
# 步長
auto-increment-offset = 2
# 起始值
skip_slave_start
添加日志檔案目錄:mkdir ....
chwon -R mysql:mysql ....
3)、如果此時兩台伺服器均為建立立,且無其它寫入操作,各伺服器隻需記錄目前自己二進制日志檔案及事件位置,以之作為另外的伺服器複制起始位置即可
####serverA
mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
File: mysql-bin.000001
Position: 710
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
####serverB
mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 811
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
4)分别在AB上建立有複制權限的賬号:
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';
mysql> FLUSH PRIVILIGES;
4、各伺服器接下來指定對另一台伺服器為自己的主伺服器即可:
####serverA
mysql> CHANGE MASTER TO MASTER_HOST=..,MSTAER_USER=..,MASTER_PASSWORD=..,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=811
####serverB
mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=710
三、雙主模型的實作