天天看點

mysql主主複制(雙主複制)配置步驟

mysql主主複制結構差別于主從複制結構。在主主複制結構中,兩台伺服器的任何一台上面的資料庫存發生了改變都會同步到另一台伺服器上,這樣兩台伺服器互為主從,并且都能向外提供服務。

有了上一節的主從複制,那麼主主複制就很容易了。

一、先修改配置檔案

伺服器a(192.168.1.254)配置如下

log-bin   = mysql-bin

server-id = 1 

expire-logs-days  = 100 

replicate-do-db   = test

binlog-ignore-db  = mysql

binlog-ignore-db  = information_schema

auto-increment-increment = 2 

auto-increment-offset = 1

伺服器b(192.168.1.252)配置

server-id = 2

expire-logs-days  = 100

auto-increment-increment = 2

auto-increment-offset = 2

兩台伺服器都重新開機

mysql> service mysqld restart

注:二都隻有server-id不同和 auto-increment- offset不同

auto-increment-offset是用來設定資料庫中自動增長的起點的,回為這兩能伺服器都設定了一次自動增長值2,是以它們的起點必須得不同,這樣才能避免兩台伺服器資料同步時出現主鍵沖突

replicate-do-db 指定同步的資料庫,我們隻在兩台伺服器間同步test資料庫

另:auto-increment-increment的值應設為整個結構中伺服器的總數,本案例用到兩台伺服器,是以值設為2

二、同步資料

本文是用test做的實驗,導出将test.sql檔案從254伺服器拷貝到252伺服器

備份資料前先鎖表,保證資料一緻性

mysql> flush tables with read lock;

# mysqldump -uroot -p123456 test> /tmp/test.sql;

mysql> unlock tables;

 scp /tmp/test.sql [email protected]:/tmp

三、互相授權使用者(在a伺服器授權一個允許b通路的使用者,反之亦然)

在伺服器a(192.168.1.254)上

mysql> grant replication slave on *.* to 'mysync'@'192.168.1.252' identified by password '123456';

mysql> flush privileges;

在伺服器b(192.168.1.252)上

mysql> grant replication slave on *.* to 'mysync'@'192.168.1.254' identified by password '123456';

四、互告bin-log資訊

在伺服器a(192.168.1.254)

mysql> show master status;

+------------------+----------+--------------+--------------------------+

| file     | position | binlog_do_db | binlog_ignore_db |

| mysql-bin.000006 |      106 |      | mysql,information_schema |

在伺服器a(192.168.1.252)

| mysql-bin.000008 |      192 |      | mysql,information_schema |

在a伺服器(192.168.1.254)上執行

mysql> change master to master_host='192.168.1.252',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000008',master_log_pos=192;

在b伺服器(192.168.1.252)上執行

mysql> change master to master_host='192.168.1.254',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=106;

五、在兩伺服器都執行以下指令

mysql> start slave;

六、檢視狀态

mysql> show slave status\g

a伺服器(192.168.1.254)狀态如下:

 slave_io_state: waiting for master to send event

  master_host: 192.168.1.252

  master_user: mysync

  master_port: 3306

connect_retry: 60

      master_log_file: mysql-bin.000008

  read_master_log_pos: 192

       relay_log_file: mysqld-relay-bin.000009

relay_log_pos: 337

relay_master_log_file: mysql-bin.000008

     slave_io_running: yes

    slave_sql_running: yes

      replicate_do_db: test

b伺服器(192.168.1.252)狀态如下:

  slave_io_state: waiting for master to send event

  master_host: 192.168.1.254

      master_log_file: mysql-bin.000006

  read_master_log_pos: 106

       relay_log_file: mysqld-relay-bin.000014

relay_log_pos: 251

relay_master_log_file: mysql-bin.000006

當看到了兩個yes,即:

slave_io_running: yes

slave_sql_running: yes

說明已經配置成功了

接下來看可以做一下實驗,測試一下是否同步

ps:

在測試的過程當中,我也遇到一些問題主要是兩台機器互相通信的問題

請注意,一定要保持兩台的伺服器的mysql端口都向對方打開,要不然是不能成功同步的。