2013-08-11 25 views
5

Tôi có hai cơ sở dữ liệu mysql trên hai máy. Hãy nói đầu tiên là db sản xuất và thứ hai là bản sao giống hệt nhau. Ứng dụng php của tôi sử dụng db sản xuất mặc định. Nhưng tôi cần phải có cả hai dbs giống hệt nhau cùng một lúc. Nó có nghĩa là tôi cần giải pháp cho các trường hợp khi db sản xuất không có sẵn (ví dụ như lỗi kết nối) vì vậy tôi chỉ cần đặt thủ công thứ hai và ứng dụng của tôi chạy như bình thường. Tôi muốn làm cho nó "không kháng cự".giữ 2 mysql dbs giống hệt nhau trên hai máy

Tôi nên làm như thế nào? Tôi nghĩ đến việc đổ mỗi phút nhưng nó không phải là một giải pháp tốt khi db là phức tạp với nhiều dữ liệu ...

+2

có thể trùng lặp của [Cách nào là cách tốt nhất để đồng bộ hóa hai chiều dữ liệu động trong thời gian thực bằng cách sử dụng mysql] (http://stackoverflow.com/questions/325791/which-is-the-best-way-to -bi-directionally-synchronize-dynamic-data-in-thời gian thực) –

+0

xem http://stackoverflow.com/questions/7707859/mysql-database-sync-between-two-databases và http://stackoverflow.com/question/4804972/strategy-on-synchronizing-database-từ-nhiều-vị trí-đến-một-trung-cơ sở dữ liệu –

+0

Nếu bạn hỏi câu hỏi này thay vì trên Server Fault, bạn có thể nhận được một số câu trả lời tốt hơn. – BLaZuRE

Trả lời

1

Những câu trả lời cho rằng sao chép tiêu chuẩn không phải là một lựa chọn cho bạn, vì lý do gì:

Các các tùy chọn sau đây là các phương thức hiện có để đồng bộ hóa dữ liệu thủ công được biết đến, và sẽ tốt khi kết hợp khi được bao bọc thành ngôn ngữ kịch bản như bash v.v ... đối với cronjob khi cần với một số logic để chỉ định các bảng cụ thể nếu cần. để chạy chúng trong ánh sáng của tải trọng, vv trên một hộp sản xuất.

Lựa chọn 1: pt-table-sync

Công cụ pt-table-sync từ bộ công cụ Percona MySQL cho phép master-master, đồng bộ master-slave theo yêu cầu trong một chương trình sao chép hiện có. Hoặc bạn có thể sử dụng nó để đồng bộ hai máy chủ không có bất kỳ mối quan hệ nào.

Docs here from Percona

Làm theo ví dụ, để đồng bộ hóa một chiều.

pt-table-sync --execute h = sourcehost1, u = msandbox, p = msandbox h = desthost d = yourdb t = yourtables

Ngoài các tính năng sau tồn tại:

  1. Chế độ chạy khô (--dry-run) - Chương trình sẽ kết nối, lập kế hoạch đồng bộ hóa, phân tích các xung đột và cho bạn biết cách giải quyết đồng bộ hóa. Đây là chìa khóa để đảm bảo bạn sử dụng công cụ mạnh mẽ này đúng cách.
  2. Phân tích xung đột - xem cách dữ liệu so sánh - đưa dữ liệu này trở lại tập lệnh của bạn để nắm bắt các vấn đề tiềm ẩn hoặc không thực hiện đồng bộ hóa để tiết kiệm thời gian nếu không có sự khác biệt.

Theo tôi hiểu, mối quan hệ chủ-nô lệ không nhất thiết phải tồn tại - nhưng đồng bộ sẽ hiệu quả hơn nếu nó tồn tại vì thuật toán tổng kiểm tra hiệu quả hơn có thể được sử dụng để so sánh dữ liệu.

Phương án 2: Nóng/Truyền Sao lưu với XtraDb Ngoài ra, bạn có thể sử dụng một cái gì đó giống như Percona XtraBackup miễn phí trong đó chủ streaming chế độ để giữ một tập tin sao lưu đồng bộ, và khôi phục lại hộp dev của bạn khi cần thiết.

XtraBackup tạo bản sao lưu MySQL nóng cho tất cả các phiên bản của Máy chủ Percona, MySQL, MariaDB và Drizzle. Nó thực hiện streaming, nén, và sao lưu MySQL gia tăng.

Lựa chọn C: LVM Snapshots snapshot LVM có lẽ không phải là lựa chọn tốt nhất cho một hộp sản xuất nếu bạn cần để đưa họ vào bất kỳ loại tần số do các khóa ngắn gọn/vấn đề IO, nhưng dù sao đây bạn go: MySQL Backups Using LVM Snapshots

Tất cả các công cụ này di chuyển dữ liệu theo một chiều, hoặc hai chiều - như một sự hiểu biết thấu đáo về cách sử dụng chúng là rất quan trọng để tránh mất dữ liệu.