Làm thế nào để bạn đồng bộ hóa lại Master MySQL DB với Slave DB thay đổi nếu Master ngoại tuyến?


11

Máy chủ MySQL 1 đang chạy như Master.
MySQL Server 2 đang chạy như Slave.

Với cả hai DB trực tuyến, chúng ở trạng thái "đồng bộ hoàn hảo". Nếu Slave ngoại tuyến, sẽ không có vấn đề gì nếu Master vẫn trực tuyến; họ sẽ quay lại đồng bộ hóa khi Slave trực tuyến trở lại.

Bên cạnh cấu hình máy chủ, tôi đã chuyển hướng kết nối (với mã JSP) cho Slave DB nếu Master ngoại tuyến (tôi đã kiểm tra khóa học với /etc/init.d/mysqld dừng).

Khi Master trở lại trực tuyến, có phương pháp tự động nào để đồng bộ hóa Master với các bản cập nhật Slave không?

Câu trả lời:


8

Một cách tốt để loại bỏ thứ gì đó có tính chất đó là thiết lập Bản sao chính-Master hoặc Bản sao Thông tư. Điều này không bị nhầm lẫn với Thay thế MultiMaster.

Thiết lập Sao chép tròn rất dễ dàng nếu bạn đã thiết lập Sao chép chính chủ. Đây là những gì bạn cần làm để cấu hình nó.

Trong ví dụ này, chúng tôi sẽ cho rằng Tái tạo Master-Slave đang hoạt động nhưng bạn sẽ gặp một chút thời gian chết (1-2 phút):

Bước 1) Thêm dòng này vào /etc/my.cnf trên Master.

log-nô lệ-cập nhật

Bước 2) Thêm các dòng này vào /etc/my.cnf trên Slave:

log-bin = mysql-bin (hoặc có bất cứ thứ gì mà chủ nhân có cho việc này) log-nô lệ-cập nhật

CẢNH BÁO: Đây là khoảnh khắc ngắn ngủi của thời gian chết !!!

Bước 3) Trên Slave, dịch vụ mysql khởi động lại

Điều này sẽ kích hoạt nhật ký nhị phân trên Slave

Bước 4) Trên Master, dịch vụ mysql dừng

Bước 5) Sử dụng rsync để sao chép thư mục / var / lib / mysql của Slave sang Master.

CẢNH BÁO: Đây là thời gian dài hơn của thời gian chết !!!

Bước 6) Trên Slave, dịch vụ mysql dừng

Bước 7) Trên Slave, tìm hiểu nhật ký nhị phân cuối cùng

Bước 8) Trên Slave, tìm hiểu kích thước tệp của nhật ký nhị phân cuối cùng

Bước 9) Sử dụng rsync để sao chép thư mục / var / lib / mysql của Slave sang Master. Đây phải là một bản sao nhanh hơn.

Bước 10) Trên Master, chỉnh sửa
Dòng 2 của master.info với nhật ký nhị phân cuối cùng của Slave.
Dòng 3 của master.info với kích thước tệp của nhật ký nhị phân cuối cùng của Slave.
Dòng 4 của master.info với IP của Slave.
Dòng 5 là userid của người dùng sao chép (KHÔNG TOUCH)
Dòng 6 là mật khẩu của người dùng sao chép (KHÔNG TOUCH)

Bước 11) Xóa tất cả nhật ký nhị phân và tệp chỉ mục nhật ký nhị phân của Master.

Bước 12) Trên Slave, dịch vụ mysql bắt đầu, đợi 15 giây

Bước 13) Trên Master, dịch vụ mysql bắt đầu

Bước 14) Trên Master, chạy STOP SLAVE; HIỂN THỊ TÌNH TRẠNG MASTER;

Bước 15) Trên Slave, hãy chạy CHANGE MASTER TO MASTER_HOST = 'IP của Slave', MASTER_USER = 'userid của người dùng sao chép từ Step10', MASTER_PASSWORD = 'mật khẩu của người dùng sao chép từ Step10', MASTER_LOG_FILE = ' MASTER_LOG_POS = LogPos từ Bước 14.

Bước 16) Trên Slave, chạy START SLAVE;

Bước 17) Trên Master, chạy START SLAVE;

Tôi đã thực hiện các bước tương tự như thế này cho một câu hỏi StackExchange khác mà tôi đã trả lời .

Hãy thử một lần !!!


Rất đẹp! Có thể có nhiều hơn một cơ sở dữ liệu nô lệ đồng bộ hóa thành chủ, giống như một giải pháp "Master-Master-Master" không?
Herberth Amaral

Điều này đã phá vỡ thiết lập của tôi ngoài sửa chữa. Phải cài đặt lại hoàn toàn VPS của tôi. Tôi đoán tôi sẽ chụp nhanh trước khi đọc lời khuyên tinh ranh vào lần tới.
Vasili Syrakis

@VasiliSyrakis Tôi xin lỗi bạn cảm thấy lời khuyên của tôi là tinh ranh. Mặc dù vậy, trong 10 năm làm DBA của MySQL, tôi chưa bao giờ phá hủy VPS hoặc cài đặt MySQL khi sắp xếp lại nhật ký nhị phân để sao chép. Tôi đã làm điều này cho các khách hàng Drupal và Wordpress trong nhiều năm mà không có sự cố. Xin lỗi vì lời khuyên của tôi.
RolandoMySQLDBA

Hừm. Tôi không khuyên bạn nên sử dụng rsync để sao chép một phiên bản đang chạy. Tôi sẽ sử dụng Percona XtraBackup để xác định lại chủ từ nô lệ . Ngoài ra, bạn không cần log-slave-updatestrừ khi các bậc thầy sẽ có thêm nô lệ.
Bill Karwin

2

Không phải với bản sao không đồng bộ, đó là những gì MySQL cung cấp. Bạn chỉ cần nhấn vào câu tục ngữ về lý do tại sao bản sao MySQL 'out of the box' (trước 5.5) không phải là một giải pháp có tính sẵn sàng cao. Mọi thứ trở nên tốt hơn một chút với 5.5 với sao chép bán đồng bộ (http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html) nhưng với chi phí thời gian giao dịch chậm hơn khi chủ chờ đợi ack từ nô lệ.

Nếu chấp nhận khả năng mất dữ liệu khi chủ bị hỏng không phải là một tùy chọn, tôi muốn nói rằng một thiết lập phức tạp hơn so với chủ / đơn giản là theo thứ tự.

Sao chép Master to Master đã được coi là rắc rối hơn nhiều so với lợi ích của nhiều người nổi tiếng MySQL (ngay cả bản thân MySQL AB cũng không còn khuyến nghị đây là một giải pháp khả dụng cao). Vì vậy, tôi nghĩ rằng việc sử dụng thiết lập DRBD để giữ cho chủ hoạt động và nô lệ thụ động đồng bộ hóa bằng cách sử dụng các bản sao cấp khối là những gì bạn thực sự cần ở đây.


1
Tôi yêu DRBD bản thân mình. Tôi làm việc với nó thường xuyên với nhiều khách hàng sử dụng ucarp làm cơ chế chuyển đổi dự phòng của tôi. DRBD thực sự rất tốt và thích hợp với HA, với điều kiện cơ sở dữ liệu là tất cả InnoDB. Bất kỳ bảng MyISAM nào mở trong quá trình chuyển đổi dự phòng đều bị đánh dấu bị hỏng ngay cả trong Trung học DRBD. InnoDB chỉ trải qua quá trình khôi phục sự cố khi không thành công với Chính DRBD mới. Vì vậy, tôi thấy DRBD và InnoDB được sử dụng cùng nhau. Cảm ơn bạn đã có ý thức tốt để đưa DRBD lên. +1 cho câu trả lời của bạn.
RolandoMySQLDBA

Cảm ơn bạn :) và tôi đoán trong câu trả lời của mình Tôi đang đưa ra giả thuyết rằng nếu bạn quan tâm rất nhiều đến tính nhất quán dữ liệu giữa các bản sao của bạn, thì bạn đã có tất cả hoặc chủ yếu là InnoDB :)
TechieGurl

1

IMHO, Trước hết, trong cấu hình không đa chủ (chủ / nô lệ), nô lệ của bạn không bao giờ nên ghi. Cấu hình nô lệ my.cnf nên được cấu hình và máy chủ bắt đầu bằng:

# Flag to not take writes from network
read-only

Tiếp theo, để khắc phục vấn đề của một bậc thầy không đồng bộ với một nô lệ có thể ghi được do vô tình ghi, bạn phải làm khác dữ liệu trên cả hai máy chủ. Nếu không có xung đột chính, bạn nên quảng bá máy chủ nô lệ cũ của mình để làm chủ và tái hiện hình ảnh chủ cũ của bạn dưới dạng máy chủ nô lệ sao chép từ chủ mới. (có thể có / có thể là vấn đề dữ liệu ở đây)

Cuối cùng, nếu kịch bản ngừng hoạt động / ngừng hoạt động này thậm chí còn có khả năng xảy ra , hãy dành thời gian để thiết lập cả hai máy chủ là đa chủ (log-bin, id máy chủ, offset, v.v.). Điều này sẽ giúp bạn giảm thiểu mất điện và thời gian chết ở một mức độ nào đó.

Nếu bạn phải chạy master / Slave , ít nhất hãy nhận một số điểm thưởng để phân tách kết nối người dùng đọc và ghi trong ACL và các ứng dụng của bạn.

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.