1. 程式人生 > >Mysql雙主熱備架構搭建

Mysql雙主熱備架構搭建

背景知識:

  1. 在mysql主從架構篇我詳細介紹了主從架構的搭建,傳送門。主從架構的原理就是主節點將所有的修改事件記錄到binlog中,然後從節點將主節點binlog中的事件拷貝到自己的中繼日誌(relay log)中,從節點再重做中繼日誌將修改反映成自己的資料。
  2. 主從架構資料是單向的,即資料從主節點流向從節點。但是雙主架構則不是,它的資料流向是雙向的,因為兩個mysql伺服器互為主從。
  3. 有人可能會問了為什麼是雙主而不是三主,四主呢?這是因為mysql雖然支援一主多從但是並不允許一個從節點有多個主節點,其實也很好理解為什麼會有這個限制,因為一個從節點如果有多個主節點的話,資料的區分將會很麻煩。

1.首先我們準備如下目錄結構:

2.我們將mysql-3306和mysql-3307設定為互為主從關係,然後mysql-3308是mysql-3306的從節點,mysql-3309是mysql-3307的從節點。在config目錄下新建3306.conf,3307.conf,3308.conf,3309.conf。其中3306和3307的配置如下:

[mysqld]
user=root
character-set-server=utf8
port=3306
socket=/root/mysql/sockets/3306.sock
basedir=/root/mysql/mysql-3306
datadir=/root/mysql/data/3306
server-id=1
log-bin=master-bin
binlog_format=ROW
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay-log=relay-log-bin
#其他引數是什麼意思我就不介紹啦( 我在主從架構這篇文章中有詳細介紹 )
#雙主熱備的關鍵引數。預設情況下從節點從主節點中同步過來的修改事件是不會寫入到自己的binlog中,只有開啟如下配置才會寫入。
log_slave_updates=1 
[mysqld_safe]
log-error=/root/mysql/logs/3306.log

#3307的配置就是將上面的3306改成3307即可(注意server-id要不一樣)

分別進入mysql-3306和mysql-3307目錄,執行如下命令執行伺服器3306和3307:

#初始化
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3306 --initialize-insecure
#啟動服務
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3306


#初始化
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3307 --initialize-insecure
#啟動服務
./bin/mysqld --defaults-file=/root/mysql/config/mysql-3307

3.進入mysql-3306目錄,執行如下命令連線終端:

./bin/mysql -uroot --socket=/root/mysql/sockets/3306.sock

接下來我們建立一個叫做salve的使用者,並分配相應的許可權:

create user 'slave' identified by '666666';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';

#具體語句的格式與意思,請移步我的另一篇文章主從架構的搭建

接著執行如下命令檢視節點狀態,並進行重置:

show master status;
reset master;

4.進入mysql-3307目錄,操作步驟和第三步一致。注意記錄我在第三步中紅框框起的兩個值。

5.然後我們再執行如下命令來指定主節點:

#在3307的客戶端執行如下程式碼,設定3307為3306的從節點
stop slave;
change master to 
master_host='127.0.0.1',
master_port=3306,
master_user='slave',
master_password='666666',
master_log_file='master-bin.000001', #3306客戶端執行show master status時紅框框起的值
master_log_pos=154;
start slave;


#在3306的客戶端執行如下程式碼,設定3306為3307的從節點
stop slave;
change master to 
master_host='127.0.0.1',
master_port=3307,
master_user='slave',
master_password='666666',
master_log_file='master-bin.000001', #3307客戶端執行show master status時紅框框起的值
master_log_pos=154;
start slave;

6.以上我們就將3306和3307配置成了互為主從的關係,至此我們的雙主熱備就算配置完成了。感興趣的小夥伴可以將3308配置為3306的從節點,3309配置為3307的從節點(不會配置主從的,參考這篇文章)。

總結:

  1. 一般主從架構從節點是不需要開啟binlog日誌的,首先因為從節點是隻讀的開啟binlog日誌也沒用,因為binlog日誌記錄的是修改事件,其次從節點從relay-log中讀取主節點的修改事件時也不會將修改事件同步到自己的binlog中。因此從節點開啟binlog是沒有用。
  2. 雙主熱備的關鍵引數就是:log_salve_updates
  3. 雙主熱備其實就是兩臺mysql伺服器互為主從關係。為了實現高可用,可以在兩臺互為主從關係的伺服器下面再配置若干個從節點。
  4. 關於reset master 和 reset slave語句的區別和注意事項:傳送門