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