Mysql主主同步資料
一、環境
192.168.1.1 MysqlA
192.168.1.2 MysqlB
二,安裝配置
1.安裝mysql省略,MysqlA和MysqlB版本保持一致就可以了!
2.配置mysql
1)在兩臺機器上給對方授權
MysqlA
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backmysql@192.168.1.2 IDENTIFIED BY `ICE02FREE03`;
MysqlB
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backmysql@192.168.1.1 IDENTIFIED BY `ICE02FREE03`;
flush privileges;
2)配置主配置檔案
在MysqlA上
[mysqld]
server-id = 10
log-bin = mysql-bin
log-slave-updates
auto-increment-increment = 2
auto-increment-offset = 1
#要同步的庫名
replicate-do-db = test
在MysqlB上
[mysqld]
server-id = 20
log-bin = mysql-bin
log-slave-updates
auto-increment-increment = 2
auto-increment-offset = 2
#要同步的庫名
replicate-do-db = test
注:二庫都只有server-id不同和auto-increment-offset不同:
auto-increment-offset是用來設定資料庫中自動增長的起點的,回為這兩能伺服器都設定了一次自動增長值2,所以它們的起點必須得不同,這樣才能避免兩臺伺服器資料同步時出現主鍵衝突
replicate-do-db 指定同步的資料庫,我們只在兩臺伺服器間同步test資料庫
另:auto-increment-increment的值應設為整個結構中伺服器的總數,本案例用到兩臺伺服器,所以值設為2
配置完成後,重啟兩臺資料庫
service mysqld restart
3)同步兩臺資料庫
首先先在兩臺資料庫上建立要同步的資料庫
create database test;
分別在兩臺資料庫中,執行下命令,檢視potion,以及binlog。
MysqlA上面執行
mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 157485 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
MysqlB上面執行
mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 10465 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
##在 MysqlA 上
stop slave;
CHANGE MASTER TO master_host=`192.168.1.2`, master_user=`backmysql`, master_password=`ICE02FREE03`, MASTER_LOG_FILE=`mysql-bin.000001`, MASTER_LOG_POS=10465;
start slave;
##在 MysqlB 上
stop slave;
CHANGE MASTER TO master_host=`192.168.1.1`, master_user=`backmysql`, master_password=`ICE02FREE03`, MASTER_LOG_FILE=`mysql-bin.000001`, MASTER_LOG_POS=157485;
start slave;
##分別檢視兩臺資料庫的slave狀態。
mysql> show slave statusG;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
##都為yes就ok了
4)驗證mysql主主
###好了現在我們來驗證吧
在MysqlA的mysqldb資料庫中建立表
create table test (name varchar(15) not null,city varchar(15) not null,birth date not null);
在MysqlB的mysqldb資料庫中能夠檢視到該表
mysql> show tables;
+—————-+
| Tables_in_test |
+—————-+
| test |
+—————-+
1 row in set (0.00 sec)
在MysqlB中向表test插入資料
insert into test values (“lequ”,”shanghai”,”2012-10-10″);
在MysqlA中檢視錶test
mysql> select * from test;
+——+———-+————+
| name | city | birth |
+——+———-+————+
| lequ | shanghai | 2012-10-10 |
+——+———-+————+
1 row in set (0.00 sec)