程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql主主同步

mysql主主同步

編輯:MySQL綜合教程

A服務器:
host 192.168.1.101
port 3306
B服務器:
host 192.168.1.102
port 3306
 
1,授權用戶:
A服務器
mysql>grant replication slave,file on *.* to 'repl9'@'192.168.1.102' identified by '1234569';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
B服務器
mysql>grant replication slave,file on *.* to 'repl8'@'192.168.1.101' identified by '1234568';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
 
2,配置文件
A服務器
log-bin=mysql-bin
server-id   = 1
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
master-host     =   192.168.1.102
master-user     =   repl8
master-password =   1234568
master-port     = 3306
 
B服務器
 
log-bin=mysql-bin
server-id   = 2
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset = 2
master-host     =   192.168.1.101
master-user     =   repl9
master-password =   1234569
master-port     = 3306                                                                    
 
 
啟動服務器就ok了
 
 
--------------------------------------------------
Q: 當在另一台機器上登錄MySQL時出現如下錯誤:
 
ERROR 2003 (HY000): Can't connect to MySQL server on 'x.x.x.x' (111)
 
A: 原因是MySQL考慮到安全因素,默認配置只讓從本地登錄
 
打開 /etc/mysql/my.cnf 文件,找到 bind-address = 127.0.0.1 修改為 bind-address = 0.0.0.0
 
重啟mysql : sudo /etc/init.d/mysql restart
 
 
========================================
101 增加,102不同步   ?????????
mysql -h192.168.1.102 -urepl8 -p1234568        ok
 
102 增加,101 同步
mysql -h192.168.1.101 -urepl9 -p1234569       ok
 
比較兩組的show slave status\G;
102
 
           Slave_IO_Running: No
          Slave_SQL_Running: Yes
            Replicate_Do_DB: test
        Replicate_Ignore_DB: mysql
 
 
sudo /etc/init.d/mysql restart
sudo service mysql restart   以後就變成:lave_IO_Running: YES
 
 
 
出現的問題(多主自增長ID重復)
 
解決方法:
我們只要保證兩台服務器上插入的自增長數據不同就可以了
如:A查奇數ID,B插偶數ID,當然如果服務器多的話,你可以定義算法,只要不同就可以了
 
在這裡我們在A,B上加入參數,以實現奇偶插入
 
A:my.ini上加入參數
 
auto_increment_offset = 1
auto_increment_increment = 2
這樣A的auto_increment字段產生的數值是:1, 3, 5, 7, …等奇數ID了
 
B:my.ini上加入參數
 
auto_increment_offset = 2
auto_increment_increment = 2
這樣B的auto_increment字段產生的數值是:2, 4, 6, 8, …等偶數ID了
 
可以看出,你的auto_increment字段在不同的服務器之間絕對不會重復,所以Master-Master結構就沒有任何問題了。當然,你還可以使用3台,4台,或者N台服務器,只要保證auto_increment_increment = N 再設置一下auto_increment_offset為適當的初始值就可以了,那樣,我們的MySQL可以同時有幾十台主服務器,而不會出現自增長ID重復。
 
在這裡我們說的是2台MYSQL服務器,你也可以擴展到多台,實現方法類似
A -> B -> C-> D ->A
這樣一個環形的備份結構就形成了,最後可要記住 自增長ID(主鍵)要設計好哦,否則會出錯的。

作者“whxhz”
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved