Replikasi MySQL Master-Master dari SEMUA basis data. Bagaimana?


16

Latar belakang : Saya memiliki dua pengaturan server MySQL 5.1 dalam replikasi berbasis baris Master-Master (RBR) mengikuti panduan yang sangat baik ini . Saya ingin semua database direplikasi, dan akan menambahkan database baru secara teratur.

Sasaran : Saya ingin dapat menambahkan basis data baru ke replikasi dengan hanya menambahkan DB ke salah satu server; tanpa harus menghentikan kedua budak, mengubah file konfigurasi, me-restart server MySQL, dan memulai kembali budak.

Pertanyaan : Dari apa yang saya baca, saya pikir saya bisa melakukan ini dengan hanya menghilangkan setiap binlog-do-db, binlog-ignore-db, replicate-do-db, dan replicate-ignore-dbpengaturan dalam konfigurasi masing-masing server, tapi aku tidak bisa yakin. Dokumen MySQL tentang bagaimana opsi replikasi tingkat Database dan Tabel dievaluasi membuat saya berpikir mungkin tidak ada cara untuk mencapai ini sama sekali.

Bagian yang relevan dari /etc/mysql/my.cnffile saya disalin di bawah ini. Apakah saya di jalur yang benar? Apakah yang saya inginkan bahkan mungkin?

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
Buat DB pada mesin yang Anda arahkan untuk menulis.
Martin

apa konfigurasi penuh Anda? Saya mencoba jawaban tesis di bawah ini, itu tidak berhasil :-(
zx1986

Jawaban:


17

Ini adalah bagaimana saya melakukannya untuk kedua tuan

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

Apakah Anda dapat menambahkan database ke salah satu master dan membuatnya secara otomatis direplikasi ke yang lain?
Andrew Ensley

ya mereka lakukan .. saya hanya mengatur yang mana yang harus diabaikan
Mike

1
Dua pertanyaan: Saya hanya perlu memastikan kami berdua mengatakan hal yang sama. # 1 Apakah Anda dapat menambahkan database ke salah satu dari dua master dan itu dibuat di yang lain secara otomatis, dan kemudian semua data yang dimasukkan ke dalam database baru direplikasi tanpa mengubah konfigurasi atau me-restart server? # 2 Apakah Anda menggunakan replikasi berbasis pernyataan atau baris? Saya perlu semua perubahan di semua database direplikasi; bahkan yang berjalan tanpa pernyataan "gunakan" sebelumnya. Apakah pengaturan ini bekerja dengan baik dengan replikasi berbasis baris?
Andrew Ensley

3
ya ya ya ya ya :)
Mike

1
Oke, saya baru mengatur server saya menggunakan pengaturan ini tadi malam. Saya melewatkan log-slave-updatespengaturan karena saya melihat tidak perlu untuk itu. Semuanya bekerja dengan sempurna. Saya dapat menambah dan menjatuhkan basis data dan perubahannya direplikasi. Terima kasih! Hadiah diberikan.
Andrew Ensley

4

Berkenaan dengan pembuatan database, masih ada laporan bug tentang menggunakan CREATE DATABASE dengan replikasi berbasis baris.

Laporan ini ditutup, tetapi bug muncul lagi di MySQL 5.1.47
Laporan ini didasarkan pada MySQL Cluster (mesin penyimpanan NDB)
Laporan ini didasarkan pada tabel replikasi-liar-pengabaian-masih mereplikasi.

Replikasi berbasis baris menyebabkan log biner tumbuh pada kecepatan luar biasa yang dapat memacu lalu lintas jaringan hanya dengan mengirimkan data log biner ke log relai dari budak.

@ Mike mengatakan dia membuat kreasi basis data untuk bekerja dan mereplikasi dengan baik. Saya tidak meragukannya sama sekali. Apa yang saya sedikit belajar dari MySQL (eh Oracle) tidak mendapatkan semua ketegaran dari replikasi berbasis baris setelah database instantiated.

Anda mungkin ingin beralih ke row_format MIXED jika Anda masih menginginkan entri berbasis baris dalam log biner. Secara internal, format log biner cenderung mengambang antara pernyataan dan tetap diperbaiki: (Lihat http://bugs.mysql.com/bug.php?id=40146 ). Lebih banyak laporan bug ditutup menggunakan campuran dan menghindar dari berbasis baris ( http://bugs.mysql.com/bug.php?id=39701 ) tetapi masalah masih terjadi secara intermiten.

CATATAN FINAL

Untuk kewarasan Anda sendiri, silakan kembali ke replikasi berbasis pernyataan dan dengan demikian membuat BUAT DATABASE (yang merupakan Pernyataan SQL) stabil dan konsisten untuk SQL berikutnya terhadap database yang dibuat. Faktanya, laporan bug terbaru menunjukkan bahwa yang terbaik adalah menggunakan replikasi berbasis pernyataan, terlepas dari apa yang dikatakan dokumentasi tentang opsi tingkat-basis data dan tingkat-tabel.


Terima kasih atas semua info itu. Satu-satunya masalah saya dengan replikasi berbasis pernyataan adalah bahwa perubahan menentukan database (yaitu "INSERT INTO db1.table1 (col1) VALUES ('hi');") tidak akan berfungsi kecuali jika database adalah database yang saat ini digunakan. Saya kira mungkin sudah saatnya untuk beralih ke replikasi berbasis pernyataan dan membersihkan beberapa kode ...
Andrew Ensley

Ternyata itu tidak sulit untuk memperbaiki kode yang diperlukan. Saya menggunakan replikasi berbasis pernyataan sekarang. Terima kasih atas sarannya.
Andrew Ensley

0

Hmm ... Anda juga harus mencari cara untuk menangani / membedakan kunci dan bidang yang bertambah secara otomatis. Ini terlihat menarik .. http://mysql-mmm.org/


Ini ditangani di auto-increment-increment, dan auto-increment-offsetpengaturan dalam file konfigurasi saya. Lihat halaman ini: dev.mysql.com/doc/refman/5.1/en/…
Andrew Ensley

Saya pikir Anda salah paham. @Andrew berbicara tentang menambahkan basis data baru, bukan menambahkan server basis data baru. Jika @Andrew memperkenalkan server database baru, maka mungkin ada tabrakan kunci saat mendistribusikan kembali data di antara 3 atau lebih server DB, yang akan dijawab oleh jawaban Anda. +1 untuk upaya Anda, tetapi harap baca semua pertanyaan dengan cermat. Saya telah dibakar dengan cara yang sama juga.
RolandoMySQLDBA

@all: Ups .. Maaf. Aku berani bersumpah aku membacanya lengkap, tetapi tidak boleh skim sebagai gantinya ...
Nandhini Anand

-1

cmiiw saya pikir Anda harus dapat membuat database pada master1 dan master2 tanpa mengubah conf atau menghentikan slave, tetapi pastikan replikasi master - master berjalan. karena Anda tidak menentukan basis data mana yang harus ditiru, itu berarti semua basis data akan direplikasi jika Anda tidak mendefinisikannya di my.cnf.


Itulah tepatnya yang saya tanyakan di sini. Sejauh ini saya tidak dapat menemukan jawaban yang pasti.
Andrew Ensley
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.