Directionally-bi mysql kullanarak gerçek zamanlı dinamik verileri senkronize etmek için en iyi yol olduğu

4 Cevap php

İşte senaryo. Aynı tablo ile iki mysql veritabanları olan iki ayrı yerde 2 web sunucuları. Tablolar içindeki bilgileri gerçek zamanlı olarak aynı olması beklenmektedir.

İşte sorundur. yere ya da bir kullanıcı aynı anda her tabloda üçüncü kayıt farklı kişiler tarafından aynı anda girildi altındaki ilk iki tablolarda, gösterildiği gibi aynı tabloya yeni bir rekor girerse. Tablolardaki veriler aynı artık. Aşağıda olursa güncellemeler gerçekleşecek nerede üçüncü tabloda gösterildiği gibi veriler gerçek zamanlı olarak aynı kalmasını sağlamak için en iyi yolu nedir? Bu şekilde yerine her tabloda 3 satır ile biten aşağıdaki resimlerde, yeni kayıtlar iki yönlü çoğaltılır ve 4 sütun ile bu kez yine 2 özdeş tabloları oluşturmak için her iki tabloda da eklenir?

Server A in Location A
==============

Table Names
| ID| NAME  |
|-----------|
| 1 | Tom   |
| 2 | Scott	|
|-----------|
| 3 | John  |
|-----------|

Server B in Location B
==============
Table Names
| ID| NAME  |
|-----------|
| 1 | Tom   |
| 2 | Scott |
|-----------|
| 3 | Peter	|
|-----------|


Expected Scenario
===========
Table Names
| ID| NAME  |
|-----------|
| 1 | Tom   |
| 2 | Scott |
| 3 | Peter |
| 4 | John  |
|-----------|

4 Cevap

Iki usta üzerinde veritabanı kopyalayan elde edilecek kadar performans yok. Eğer uygulama doğru kodlamak Ancak başarısızlık bir şık biraz var.

Usta-Usta kurulum aslında Slave-Master, kurulum aynıdır, ancak her ikisi de Köleler başladı ve her kutuda config dosyaları önemli bir değişiklik oldu.

Usta MySQL 1:

auto_increment_increment = 2
auto_increment_offset = 1

Usta MySQL 2:

auto_increment_increment = 2
auto_increment_offset = 2

Bu iki parametre iki sunucular nedense bir birincil anahtar kavga edilir, onlar çoğaltmak ve çoğaltma öldürmek yok emin olun. 1 yerine arttırma, herhangi bir otomatik artış alan 2 ile gecikme zammı ile. Bir kutusunda o 1'den ofset başlayacak ve 2 ofset başlayacak ikinci kutusunda vb dizisini 1 3 5 7 9 11 13 çalışacaktır ve mevcut test itibaren vb 2 4 6 8 10 12 boyunca koşmak, otomatik artış sonraki ücretsiz numarayı değil, daha önce bıraktığı tek almaya görünür. Örneğin Sunucu 1 ilk 3 kayıtları (1 3 ve 5), Sunucu 2 ekler 4., o (kullanılmayan sol değil 2) 6 anahtarı verilecektir ekler eğer.

Once you've set that up, start both of them up as Slaves. Then to check both are working ok, connect to both machines and perform the command SHOW SLAVE STATUS and you should note that both Slave_IO_Running and Slave_SQL_Running should both say “YES” on each box.

Sonra tabii, bir tablodaki birkaç kayıtları oluşturmak ve sadece bir kutu tek numaralı birincil anahtarları ve diğer sadece çift sayılı olanları artan takınca sağlamak.

Sonra tüm testler yapmak bunu diğer kopyalayan ile her kutuda tüm standart uygulamaları gerçekleştirebilirsiniz sağlamak.

It's relatively simple once it's going. But as has been mentioned, MySQL do discourage it and advise that you ensure you are mindful of this functionality when writing your application code.

Düzenleme: Ben uzaklıklar bu kadar doğru ve emin eğer daha ustaları eklemek için teorik olarak mümkün olduğunu varsayalım. Sen daha gerçekçi olsa da, bazı ek köle ekleyebilirsiniz.

MySQL yaptım bile, muhtemelen (işlemek her bir işlem için eşitlemek için başka bir sunucu için bekleyen başarımdan alamaz) kullanmak istemem, ancak senkron çoğaltma desteklemiyor.

Bunu daha uygun mimari çözümleri dikkate almak zorunda kalacak - bir birleştirme yapmak ve önceden belirlenmiş bir şekilde çatışmaları çözmek Üçüncü parti ürünler vardır - bu gerçekten tek yoludur.

Bu şekilde çalışması için mimari bekliyor naif - herhangi bir veritabanı için "kolay düzeltme" değil, sadece MySQL yoktur.

Bu UIDs aynı olduğunu önemli mi? Ya da yerel UID bir tablo veya sütun eşleme uzak UID olan ve bu genelinde çoğaltmak isteyen nesneler için özel senkronizasyon kod yazma düşünce eğlendirmek istiyorum yabancı anahtar sütunları UID'leri herhangi gerekli haritalama, vb mi?

Tablolarınızın senkronize sağlamak için tek yol kurulum için veritabanları arasında bir 2-yolu çoğaltma olduğunu.

Fakat, MySQL, sadece tek yönlü çoğaltma izin, böylece sadece bu yapılandırmada sorun çözülemedi.

Açık olmak gerekirse, "Ayar" a 2-yolu çoğaltma ama MySQL AB can discourages this.