天天看點

mysql主主-配置資料同步

1、資料庫同步設定

  主機作業系統:Centos 6.2

  資料庫版本:mysql  Ver 14.14 Distrib 5.1.73

  前提:MYSQL資料庫正常啟動

      ServA:122.112.x.x

      ServB:211.101.x.x

1.1 配置同步賬号

 在ServA上增加一個ServB可以登入的帳号:

 Mysql>grant replication slave on  *.* TO yunip@'211.101.x.x' IDENTIFIED BY '123456';

 mysql> flush privileges; 

 mysql> quit 

 在ServB上增加一個ServA可以登入的帳号:

Mysql>grant replication slave on  *.* TO yunip@'122.112.x.x' IDENTIFIED BY '123456'; 

mysql> flush privileges; 

mysql> quit

2、配置資料庫參數

   以root使用者登入ServA,修改ServA的my.cnf檔案

[mysqld]

log-bin=mysql-bin

server-id = 1

log-bin = mysql-bin

log-slave-updates

 sync_binlog=1

 auto-increment-increment = 2

 auto-increment-offset = 1                              //就是為了讓雙主同時在一張表中進行添加操作時不會出現id沖突.          replicate-do-db = test

replicate-ignore-db =mysql

master-host     =   211.101.x.x

master-user     =   yunip

master-password =   123456

master-port     = 3306

重新開機mysql服務:

service mysqldrestart

以root使用者登入ServB,修改ServB的my.cnf檔案

vi /etc/my.cnf

在[mysqld]的配置項中增加如下配置:

server-id = 2

       log-slave-updates

 auto-increment-offset = 2                       //就是為了讓雙主同時在一張表中進行添加操作時不會出現id沖突.    

replicate-do-db = test

 replicate-ignore-db =mysql

master-host     =   122.112.x.x

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

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

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

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

(這段标注是抄襲51cto好友“紅豆殺”的其首頁是http://home.51cto.com/index.php?s=/space/2517622^_^ 在他這學到不少東西。)

#配置完成後,重新開機兩台資料庫

 service mysqld restart

3、分别重新開機伺服器ServA、ServB上的mysql服務 

 分别在伺服器ServA、ServB 上檢視做為主伺服器狀态 

在ServA:

mysql> stop slave;

mysql> flush tables with read lock;#防止進入新的資料 

Query OK, 0 rows affected (0.00 sec) 

mysql> show master status\G

*************************** 1. row ***************************

       File: mysql-bin.000015

       Position: 106

       Binlog_Do_DB:

       Binlog_Ignore_DB:

       1 row in set (0.00 sec)

在ServB:

mysql> flush tables with read lock; 

       File: mysql-bin.000025

 注:這裡鎖表的目的是為了生産環境中不讓進新的資料,好讓從伺服器定位同步位置。初次同步完成後,記得解鎖。

 4、分别在伺服器ServA、ServB上用change master語句指定同步位置 : 

在 ServA

mysql>change master to master_host='211.101.x.x',master_user='yunip',master_password='123456',master_log_file='mysql-bin.000025',master_log_pos=106; 

Query OK, 0 rows affected (2.28 sec)

在ServB

mysql>change master to master_host='122.112.x.x',master_user='yunip',master_password='123456',master_log_file='mysql-bin.000015',master_log_pos=106; 

Query OK, 0 rows affected (0.01 sec)

注:master_log_file,master_log_pos由上面主伺服器查出的狀态值中确定 

master_log_file對應File,master_log_pos對應Position 

在ServA、ServB上 :

mysql> unlock tables; 

分别在伺服器ServA、ServB上啟動從伺服器線程 

mysql> start slave; 

分别在伺服器ServA、ServB上檢視從伺服器狀态 : 

mysql> show slave status\G 

*************************** 1. row *************************** 

主要關注以下 2 個參數: 

... 

Slave_IO_Running: Yes 

Slave_SQL_Running: Yes 

 注:檢視以上兩項的值,均為Yes則表示狀态正常。

5、測試 

ServB上 

mysql> show databases; 

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

| Database           |

| information_schema |

| mysql              |

| p2pbbs             |

| p2pnews            |

| p2pwiki            |

| test               |

6 rows in set (0.00 sec)

mysql> use test; 

Database changed 

mysql> show tables; 

Empty set (0.00 sec) 

mysql> create table water (id int); 

Query OK, 0 rows affected (0.04 sec) 

mysql> insert into water values(1); 

Query OK, 1 row affected (0.01 sec) 

mysql>commit; 

在 ServA 上 

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

| Tables_in_db_rocky | 

| test | 

| water | 

2 rows in set (0.00 sec) 

mysql> select * from water; 

+------+ 

| id | 

| 1 | 

1 row in set (0.00 sec) 

 本文轉自奔跑在路上部落格51CTO部落格,原文連結http://blog.51cto.com/qiangsh/1554761如需轉載請自行聯系原作者

qianghong000