Tôi đang phát triển một ứng dụng để chạy trên PC khách (Win) được cấu hình với phiên bản máy chủ MySQL 5.1 sẽ hoạt động như một nô lệ chỉ đọc cho chủ từ xa. Trình điều khiển từ xa có hàng tá lược đồ, nhưng tôi chỉ cần một lược đồ cho mỗi máy khách nên tôi cung cấp cài đặt sao chép-do-db trong my.ini để chỉ sao chép lược đồ mà máy khách cần. Bản sao này hoạt động, nhưng khi khách hàng của chúng tôi đến các khu vực trên thế giới nơi truy cập internet chỉ khả dụng qua mạng không dây 3G, tính phí bằng cách sử dụng dữ liệu, họ nhanh chóng vượt quá giới hạn gói dữ liệu của họ và gặp phải các vấn đề đắt giá.
Theo tôi hiểu, MySQL ghi tất cả các giao dịch cho tất cả các lược đồ vào một tệp binlog duy nhất, điều đó có nghĩa là mỗi khách hàng phải tải xuống tất cả các giao dịch được thực hiện trên mỗi lược đồ trên bản gốc, sau đó tải xuống, áp dụng bộ lọc cơ sở dữ liệu cho mỗi lần sao chép- cài đặt do-db trong tệp my.ini của máy khách.
Để giảm thiểu sự không hiệu quả này, tôi đã sử dụng cài đặt Slave_compression_protatio = 1 , dường như giảm 50% dữ liệu được truyền, nhưng vẫn khiến khách hàng của chúng tôi nhanh chóng vượt quá giới hạn dữ liệu của họ để tăng hóa đơn 3G.
Tôi không thể tưởng tượng tôi là người duy nhất phải đối mặt với điều này, vì vậy tôi chắc chắn tôi sẽ nhận được rất nhiều câu trả lời về cách đạt được điều này bằng cách đặt x = y. Tuy nhiên, tôi không thể tìm thấy bất kỳ tài liệu nào về cài đặt như vậy, cũng không phải là cách tiếp cận được đề xuất.
Cho đến nay, đây là suy nghĩ của tôi về một giải pháp khả thi, vui lòng cung cấp phản hồi hoặc các tuyến đường thay thế:
- Thiết lập nô lệ "proxy" cho mỗi lược đồ (trên hộp khác nhau hoặc cùng hộp với một phiên bản / cổng MySQL khác nhau)
- Định cấu hình nô lệ proxy để sao chép-do-db chỉ một cơ sở dữ liệu mà khách hàng muốn sao chép.
- Định cấu hình phiên bản MySQL của máy khách làm nô lệ cho nô lệ proxy thích hợp.
Điều này sẽ dẫn đến việc khách hàng chỉ kéo dữ liệu binlog cho lược đồ của họ. Nhược điểm (theo như tôi có thể nói) là nó làm tăng đáng kể sự phức tạp trong thiết lập của chúng tôi, có khả năng làm cho nó dễ vỡ hơn.
Suy nghĩ? Cách tiếp cận này thậm chí sẽ làm việc?
Lưu ý, chúng tôi đang chạy máy chủ MySQL 5.0 trên RedHat, nhưng chúng tôi có thể nâng cấp lên 5.5 nếu nó tạo ra giải pháp.