MySQL Master-Master Sao chép TẤT CẢ các cơ sở dữ liệu. Làm sao?


16

Bối cảnh : Tôi có hai thiết lập máy chủ MySQL 5.1 trong bản sao hàng dựa trên hàng Master-Master (RBR) theo hướng dẫn tuyệt vời này . Tôi muốn tất cả các cơ sở dữ liệu được nhân rộng và sẽ bổ sung cơ sở dữ liệu mới thường xuyên.

Mục tiêu : Tôi muốn có thể thêm cơ sở dữ liệu mới để nhân rộng bằng cách chỉ cần thêm DB vào một trong các máy chủ; mà không phải dừng cả hai nô lệ, thay đổi các tệp cấu hình, khởi động lại máy chủ MySQL và khởi động lại nô lệ.

Câu hỏi : Từ những gì tôi đã đọc, tôi nghĩ tôi có thể làm điều này bằng cách đơn giản bỏ qua bất kỳ binlog-do-db, binlog-ignore-db, replicate-do-db, và replicate-ignore-dbcác thiết lập trong cấu hình của từng máy chủ, nhưng tôi không thể chắc chắn. Các tài liệu của MySQL về cách các tùy chọn sao chép mức Cơ sở dữ liệuBảng được đánh giá khiến tôi nghĩ rằng có thể không có cách nào để thực hiện điều này cả.

Các phần có liên quan của /etc/mysql/my.cnfcác tập tin của tôi được sao chép dưới đây. Có phải tôi đang trên đường ray bên phải không? Là những gì tôi muốn thậm chí có thể?

Thầy 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

Thầy 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
Tạo DB trên máy bạn đang hướng dẫn ghi vào.
Martin

cấu hình đầy đủ của bạn là gì? Tôi thử câu trả lời bên dưới, nó không hoạt động :-(
zx1986

Câu trả lời:


17

Đây là cách tôi đã làm cho cả hai bậc thầy

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

Bạn có thể thêm cơ sở dữ liệu vào chủ hoặc để chúng tự động sao chép sang cơ sở dữ liệu khác không?
Andrew Oblley

vâng, họ đã làm .. tôi chỉ thiết lập những cái cần bỏ qua
Mike

1
Hai câu hỏi: Tôi chỉ cần đảm bảo rằng cả hai chúng ta đều nói cùng một điều. # 1 Bạn có thể thêm cơ sở dữ liệu vào một trong hai chủ và nó được tạo tự động trên cơ sở dữ liệu kia và sau đó tất cả dữ liệu được chèn vào cơ sở dữ liệu mới được sao chép mà không thay đổi cấu hình hoặc khởi động lại máy chủ không? # 2 Bạn có đang sử dụng bản sao dựa trên câu lệnh hoặc hàng không? Tôi cần tất cả các thay đổi trên tất cả các cơ sở dữ liệu được nhân rộng; ngay cả những người chạy mà không có một tuyên bố "sử dụng" trước. Các cài đặt này có hoạt động tốt với sao chép dựa trên hàng không?
Andrew Oblley

3
vâng vâng vâng vâng vâng :)
Mike

1
Ok, tôi vừa thiết lập máy chủ của mình bằng các cài đặt này tối qua. Tôi bỏ qua các log-slave-updatesthiết lập vì tôi thấy không cần nó. Mọi thứ hoạt động hoàn hảo. Tôi có thể thêm và xóa cơ sở dữ liệu và các thay đổi được nhân rộng. Cảm ơn bạn! Tiền thưởng được trao.
Andrew Oblley

4

Liên quan đến việc tạo cơ sở dữ liệu, vẫn còn các báo cáo lỗi về việc sử dụng CREATE DATABASE với sao chép dựa trên hàng.

Báo cáo này đã bị đóng, nhưng lỗi lại xuất hiện trong MySQL 5.1.47
Báo cáo này dựa trên Cụm sao MySQL (công cụ lưu trữ NDB)
Báo cáo này dựa trên bảng sao chép-wild-ign-bảng vẫn sao chép.

Sao chép dựa trên hàng làm cho các bản ghi nhị phân tăng trưởng với tốc độ phi thường có thể tăng lưu lượng truy cập mạng chỉ bằng cách chuyển dữ liệu nhật ký nhị phân sang các bản ghi chuyển tiếp của nô lệ.

@Mike nói rằng ông đã tạo cơ sở dữ liệu để làm việc và sao chép tốt. Tôi không nghi ngờ gì cả. Những gì tôi là một chút ít của MySQL (eh Oracle) đã không nhận được tất cả các kink ra khỏi bản sao dựa trên hàng một khi cơ sở dữ liệu được khởi tạo.

Bạn có thể muốn chuyển sang row_format MIXED nếu bạn vẫn muốn các mục dựa trên hàng trong nhật ký nhị phân. Trong nội bộ, định dạng nhật ký nhị phân có xu hướng nổi giữa câu lệnh và cố định bằng mọi cách: (Xem http://bugs.mysql.com/orms.php?id=40146 ). Nhiều báo cáo lỗi được đóng bằng cách sử dụng hỗn hợp và tránh xa hàng dựa trên hàng ( http://bugs.mysql.com/orms.php?id=39701 ) nhưng vẫn xảy ra sự cố không liên tục.

LƯU Ý CUỐI CÙNG

Đối với sự tỉnh táo của riêng bạn, vui lòng quay lại bản sao dựa trên câu lệnh và do đó làm cho CREATE DATABASE (là một câu lệnh SQL) ổn định và nhất quán cho SQL tiếp theo dựa trên cơ sở dữ liệu được tạo. Trong thực tế, báo cáo lỗi gần đây nhất cho thấy tốt nhất là sử dụng sao chép dựa trên câu lệnh, bất kể tài liệu nói gì về các tùy chọn cấp cơ sở dữ liệu và mức bảng.


Cảm ơn tất cả các thông tin đó. Vấn đề duy nhất của tôi với sao chép dựa trên câu lệnh là các thay đổi chỉ định cơ sở dữ liệu (nghĩa là "INSERT INTO db1.table1 (col1) VALUES ('hi');") sẽ không hoạt động trừ khi cơ sở dữ liệu là cơ sở dữ liệu hiện tại đang sử dụng. Tôi cho rằng có lẽ đã đến lúc chuyển sang sao chép dựa trên câu lệnh và dọn sạch một số mã ...
Andrew Oblley

Hóa ra không khó để sửa mã cần thiết. Bây giờ tôi đang sử dụng bản sao dựa trên câu lệnh. Cảm ơn vì lời khuyên.
Andrew Oblley

0

Hmm ... Bạn cũng sẽ phải tìm ra cách xử lý / phân biệt các khóa và trường tăng tự động. Điều này có vẻ thú vị .. http://mysql-mmm.org/


Điều này được xử lý trong auto-increment-incrementauto-increment-offsetcài đặt trong các tệp cấu hình của tôi. Xem trang này: dev.mysql.com/doc/refman/5.1/en/ từ
Andrew Oblley

Tôi nghĩ bạn hiểu lầm. @Andrew đang nói về việc thêm cơ sở dữ liệu mới, không thêm máy chủ cơ sở dữ liệu mới. Nếu @Andrew giới thiệu các máy chủ cơ sở dữ liệu mới, thì có thể xảy ra xung đột chính khi phân phối lại dữ liệu giữa 3 hoặc nhiều máy chủ DB, câu trả lời của bạn sẽ giải quyết. +1 cho nỗ lực của bạn, nhưng vui lòng đọc kỹ tất cả các câu hỏi. Tôi đã bị đốt cháy theo cách tương tự là tốt.
RolandoMySQLDBA

@all: Rất tiếc .. Xin lỗi. Tôi có thể thề rằng tôi đã đọc nó hoàn chỉnh, nhưng không cần phải đọc lướt qua ...
Nandhini Anand

-1

cmiiw tôi nghĩ bạn sẽ có thể tạo cơ sở dữ liệu trên master1 và master2 mà không thay đổi conf hoặc dừng nô lệ, nhưng hãy chắc chắn rằng bản sao chính - master đang chạy. bởi vì bạn không xác định cơ sở dữ liệu nào cần sao chép, điều đó có nghĩa là tất cả cơ sở dữ liệu sẽ được sao chép nếu bạn không xác định cơ sở dữ liệu trên my.cnf.


Đó chính xác là những gì tôi đang hỏi ở đây. Tôi không thể tìm thấy một câu trả lời dứt khoát về điều này cho đến nay.
Andrew Oblley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.