mysqlプライマリ同期

3715 ワード

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
 
2組のshow slave statusGを比較する.
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重複)
 
解決方法:
2台のサーバに挿入された自己成長データが異なることを保証すればいいのです
例えば: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です.
 
ダイナミックグローバル設定
 
SET global auto_increment_offset=1;
SET global auto_increment_increment=2;

 
 
 
あなたのauto_incrementフィールドは、異なるサーバ間では絶対に繰り返されないので、Master-Master構造に問題はありません.もちろん、auto_を保証する限り、3台、4台、またはN台のサーバを使用することもできます.increment_increment=N auto_を再設定increment_offsetは適切な初期値でよいので、MySQLは自己成長IDの重複を生じずに数十台のプライマリサーバを同時に持つことができます.
 
ここでは2台のMYSQLサーバについてお話ししますが、複数台に拡張することもできます.実装方法は似ています.
A -> B -> C-> D ->A
このようなリング状のバックアップ構造が形成され、最後に自己成長ID(プライマリ・キー)を設計しなければならないことを覚えておいてください.そうしないと、エラーが発生します.