2008-08-27 35 views
11

Tôi đang chạy một hệ thống sao chép nhị phân MySQL master-slave (phew!) Mà, đối với một số dữ liệu, không đồng bộ (nghĩa là, master chứa nhiều dữ liệu hơn slave). Nhưng nô lệ dừng lại rất thường xuyên trên lỗi MySQL nhỏ nhất, điều này có thể bị vô hiệu hóa không? (có lẽ là một thiết lập my.cnf cho các nô lệ nhân bản bỏ qua-sao chép lỗi hoặc một số loại;))Sao chép nhật ký nhị phân MySQL: Có thể đặt để bỏ qua lỗi không?

Đây là những gì xảy ra, mỗi bây giờ và sau đó, khi nô lệ cố gắng để nhân rộng một mục mà không tồn tại , nô lệ chỉ chết. kiểm tra nhanh tại SHOW SLAVE STATUS \ G; cho

 Slave-IO-Running: Yes 
     Slave-SQL-Running: No 
     Replicate-Do-DB: 
      Last-Errno: 1062 
      Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table (FIELDS) VALUES (VALUES)' 

mà tôi kịp thời sửa chữa (một khi tôi nhận ra rằng các nô lệ đã được dừng lại) bằng cách làm như sau:

STOP SLAVE; 
RESET SLAVE; 
START SLAVE; 

... thời gian gần đây này nhận được loại mệt mỏi, và trước Tôi nhổ ra một số loại PHP mà làm điều này cho tôi, tôi đã tự hỏi nếu có một số mục my.cnf mà sẽ không giết nô lệ về lỗi đầu tiên.

Chúc mừng,

/mp

+0

"RESET SLAVE" sẽ chỉ bắt đầu sao chép từ việc bắt đầu lại. Lỗi tương tự cho cùng một hàng có nghĩa vụ phải đến sớm hay muộn trên con đường đúng ... thì, làm sao nó giải quyết được vấn đề của bạn. – Uday

Trả lời

11

Có, với --slave-skip-errors = xxx trong my.cnf, trong đó xxx là 'tất cả' hoặc danh sách các mã lỗi của dấu phẩy.

+4

Cảnh báo công bằng mà làm như vậy thực sự có thể làm hỏng cơ sở dữ liệu nô lệ của bạn. Chúng là lỗi vì một lý do. :) – Riedsio

+0

trong my.cnf, tôi tin rằng bạn đặt điều này mà không có hàng đầu "-". – TheSatinKnight

3

Thứ nhất, bạn có thực sự muốn bỏ qua lỗi? Nếu bạn gặp lỗi, có khả năng dữ liệu không được đồng bộ hóa nữa. Có lẽ những gì bạn muốn là để thả cơ sở dữ liệu nô lệ và khởi động lại quá trình đồng bộ khi bạn nhận được một lỗi. Thứ hai, tôi nghĩ rằng lỗi bạn đang nhận được không phải là khi bạn sao chép một mục không tồn tại (điều đó có nghĩa là gì?) - có vẻ như bạn đang sao chép một mục đã tồn tại trong cơ sở dữ liệu nô lệ.

Tôi nghi ngờ vấn đề chủ yếu phát sinh từ việc không bắt đầu từ một bản sao dữ liệu sạch. Dường như thầy đã được sao chép vào nô lệ; sau đó nhân rộng đã bị tắt (hoặc không thành công); và rồi nó lại bắt đầu lại, nhưng không cho nô lệ cơ hội bắt kịp với những gì nó đã bỏ lỡ.

Nếu bạn có thời gian khi chủ có thể đóng để ghi truy cập đủ dài để sao chép cơ sở dữ liệu và nhập nó vào trong nô lệ, điều này có thể khiến các vấn đề không còn nữa.

1

Hiện tại mysqldump lệnh có một số tùy chọn để trợ giúp thiết lập sao chép nhất quán. Kiểm tra --master-data sẽ đặt tệp nhật ký nhị phân và vị trí trong kết xuất và tự động đặt khi được nạp vào nô lệ. Ngoài ra --single-transaction sẽ làm bãi chứa bên trong một giao dịch để không có khóa viết là cần thiết để làm một bãi chứa phù hợp.

+0

Điều đáng chú ý là giao dịch đơn lẻ chỉ sử dụng cho các bảng giao dịch, chẳng hạn như InnoDB. –

1

Nếu nô lệ không được sử dụng cho bất kỳ bản ghi nào khác ngoài bản sao, các tác giả của Hiệu suất cao MySQL khuyên bạn nên thêm read_only trên máy chủ nô lệ để ngăn người dùng thay đổi nhầm dữ liệu trên nô lệ vì điều này cũng sẽ tạo ra lỗi bạn gặp phải.

0

tôi nghĩ rằng bạn đang làm nhân lên với đồng bộ hóa ra cơ sở dữ liệu đầu tiên đồng bộ hóa cơ sở dữ liệu và cố gắng để nhân rộng và máy chủ được tạo ra cùng một id duy nhất và cố gắng thiết lập tự động incerment bù đắp

15

ngừng nô lệ; đặt sql_slave_skip_counter toàn cầu = 1; bắt đầu nô lệ;

Bạn chỉ có thể bỏ qua lỗi hiện tại và tiếp tục quá trình sao chép.

+1

hoạt động hoàn hảo, cảm ơn. Tôi không hiểu tại sao câu trả lời này không phải là tốt nhất. – Tech4Wilco

+0

bài gốc đã được yêu cầu cho quá trình tự động, trong khi điều này hoạt động, nó vẫn còn hướng dẫn sử dụng – SeanDowney

+0

nó vẫn có thể làm việc, nhưng rất nhiều lỗi 1062 là một dấu hiệu chắc chắn của ra khỏi cơ sở dữ liệu đồng bộ nô lệ. bạn tốt hơn là cách ly là cơ sở dữ liệu "cập nhật" hoặc "chính xác" nhất, quảng bá một cơ sở dữ liệu để làm chủ, thêm một vài nô lệ vào cụm mới và gỡ bỏ chủ/nô lệ gốc – nandoP

Các vấn đề liên quan