TÜM veritabanlarının MySQL Master-Master Çoğaltması. Nasıl?


16

Arka plan : Bu mükemmel kılavuzu izleyerek Master-Master satır tabanlı çoğaltma (RBR) içinde iki MySQL 5.1 sunucu kurulumum var . Tüm veritabanlarının çoğaltılmasını istiyorum ve düzenli olarak yeni veritabanları ekleyeceğim.

Amaç : DB'yi sunuculardan birine ekleyerek çoğaltmaya yeni veritabanları ekleyebilmek istiyorum; her iki slave'i durdurmadan, yapılandırma dosyalarını değiştirmeden, MySQL sunucularını yeniden başlatmaya ve slave'leri yeniden başlatmaya gerek kalmadan.

Soru : Ne okudum, ben itibaren düşünüyorum ben sadece herhangi atlayarak bunu yapabilirsiniz binlog-do-db, binlog-ignore-db, replicate-do-dbve replicate-ignore-dbher sunucunun yapılandırmasında ayarları, ama emin olamaz. MySQL'in Veritabanı ve Tablo düzeyinde çoğaltma seçeneklerinin nasıl değerlendirildiğine dair belgeleri, bunu başarmanın bir yolu olmadığını düşündürüyor.

/etc/mysql/my.cnfDosyalarımın ilgili bölümleri aşağıda kopyalanıyor. Ben doğru yolda mıyım? İstediğim bile mümkün mü?

Master 1 :

[mysqld]
binlog-format = row
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = <master2_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

Master 2 :

[mysqld]
binlog-format = row
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = <master1_ip>
master-user = slave_user
master-password = <password>
master-connect-retry = 60

log-bin = /var/log/mysql/mysql-bin.log
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index
expire_logs_days = 14
max_binlog_size = 2048M

1
Yazmayı yönlendirdiğiniz makinede DB oluşturun.
Martin

tam yapılandırmanız nedir? Aşağıdaki tez cevap deneyin, işe yaramadı :-(
zx1986

Yanıtlar:


17

Her iki usta için de böyle yaptım

log-bin = mysqld-bin
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
log-slave-updates
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
relay-log=mysqld-relay-bin

Her iki yöneticiye de veritabanı ekleyebilir ve bunları otomatik olarak diğerine kopyalayabilir misiniz?
Andrew Ensley

evet yaptılar .. ben sadece hangilerini görmezden gelmek kurulum
Mike

1
İki soru: İkimiz de aynı şeyi söylediğimizden emin olmalıyım. # 1 İki yöneticiden birine veritabanı ekleyebiliyor musunuz ve diğerinde otomatik olarak oluşturuluyor ve ardından yeni veritabanına eklenen tüm veriler yapılandırmayı değiştirmeden veya sunucuları yeniden başlatmadan çoğaltılıyor mu? # 2 İfade veya satır tabanlı çoğaltma mı kullanıyorsunuz? Çoğaltılmış tüm veritabanlarındaki tüm değişikliklere ihtiyacım var; Hatta önceden "kullan" ifadesi olmadan çalışanlar bile. Bu ayarlar satır tabanlı çoğaltmada iyi çalışır mı?
Andrew Ensley

3
evet evet evet evet evet :)
Mike

1
Tamam, dün gece bu ayarları kullanarak sunucularımı ayarladım. log-slave-updatesAyarı atladım çünkü ihtiyacım yoktu. Her şey mükemmel çalışıyor. Veritabanları ekleyip bırakabiliyorum ve değişiklikler çoğaltılıyor. Teşekkür ederim! Ödül ödüllendirildi.
Andrew Ensley

4

Veritabanları oluşturma konusunda, CREATE DATABASE'i satır tabanlı çoğaltma ile kullanma konusunda hala hata raporları vardır.

Bu rapor kapatıldı, ancak hata MySQL 5.1.47'de tekrar görüntülendi.
Bu rapor MySQL Kümesi'ne (NDB depolama motoru)
dayanmaktadır.

Satır tabanlı çoğaltma, ikili günlüklerin olağanüstü bir hızda büyümesine neden olur ve bu da yalnızca ikili günlük verilerini slave'in röle günlüklerine gönderen ağ trafiğini hızlandırabilir.

@Mike, çalışmak ve çoğaltmak için veritabanı oluşturma olduğunu söyledi. Bundan hiç şüphem yok. Ne olduğumu bir kez veritabanı başlatıldıktan sonra satır tabanlı çoğaltma dışında tüm kinks elde değil MySQL (eh Oracle) biraz leary olduğunu.

İkili günlüklerde hala satır tabanlı girdiler istiyorsanız row_format MIXED'e geçmek isteyebilirsiniz. Dahili olarak, ikili günlük biçimi deyim ve sabitler arasında gezinme eğilimindedir: (Bkz. Http://bugs.mysql.com/bug.php?id=40146 ). Daha fazla hata raporu, satır tabanlı ( http://bugs.mysql.com/bug.php?id=39701 ) karma ve shying kullanılarak kapatılır, ancak yine de sorunlar aralıklı olarak devam eder.

NİHAİ NOT

Kendi akıl sağlığınız için, lütfen ifade tabanlı çoğaltmaya geri dönün ve böylece oluşturulan veritabanına karşı sonraki SQL için CREATE DATABASE'i (bir SQL Deyimi) istikrarlı ve tutarlı hale getirin. Aslında, en son hata raporu, belgelerin veritabanı düzeyi ve tablo düzeyi seçenekleri hakkında ne söylediğine bakılmaksızın, ifadeye dayalı çoğaltmanın kullanılmasının en iyi yol olduğunu gösterir.


Tüm bu bilgiler için teşekkürler. İfade tabanlı çoğaltma ile ilgili tek sorunum veritabanını belirten değişikliklerin (ör. "INSERT INTO db1.table1 (col1) VALUES ('hi');") veritabanı kullanılmakta olan veritabanı olmadığı sürece çalışmaz. İfade tabanlı çoğaltmaya
geçmenin

Gerekli kodu düzeltmek o kadar zor değildi. Şimdi ifade tabanlı çoğaltma kullanıyorum. Tavsiye için teşekkürler.
Andrew Ensley

0

Hmm ... Ayrıca otomatik olarak artırılan tuşları ve alanları işlemenin / ayırt etmenin bir yolunu bulmanız gerekecek. Bu ilginç görünüyor .. http://mysql-mmm.org/


Bu, yapılandırma dosyalarımdaki auto-increment-incrementve auto-increment-offsetayarlarında ele alınır . Bu sayfaya bakın: dev.mysql.com/doc/refman/5.1/en/…
Andrew Ensley

Sanırım yanlış anladın. @Andrew, yeni veritabanı sunucuları eklemekten değil, yeni veritabanları eklemekten bahsediyor. @Andrew yeni veritabanı sunucuları getiriyorsa, verilerin yanıtını ele alacağı 3 veya daha fazla DB sunucusu arasında yeniden dağıtılırken önemli çakışmalar olabilir. Çabalarınız için +1, ancak lütfen tüm soruları dikkatlice okuyun. Ben de aynı şekilde yakıldım.
RolandoMySQLDBA

@all: Hata! Üzgünüm. Tam okuduğuma yemin edebilirim, ama bunun yerine hayır yağmalıydı ...
Nandhini Anand

-1

cmiiw Ben conf değiştirmeden veya köle durmadan master1 ve master2 veritabanı oluşturmak mümkün düşündüm, ama master-master çoğaltma çalışan emin olun. hangi veritabanının çoğaltılması gerektiğini tanımlayamazsanız, my.cnf dosyasında tanımlamazsanız tüm veritabanı çoğaltılacak demektir.


Tam olarak burada sorduğum şey bu. Bu konuda kesin bir cevap bulamıyorum.
Andrew Ensley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.