Xóa nhật ký bin trong môi trường nhân rộng


13

Tôi có một câu hỏi về việc xóa nhật ký nhị phân trong môi trường nhân rộng:

Chúng tôi có một môi trường với 1 chủ và 2 nô lệ (chạy mysql 5.5). Đôi khi, chúng tôi gặp vấn đề về không gian trong thời gian xử lý nặng, theo đó thư mục nhật ký bin đã đầy. Nhật ký đã hết hạn sau mỗi 3 ngày. Tôi đã tự hỏi, có một lý do tại sao các bản ghi nên được giữ trong 3 ngày trên tất cả các hộp - chủ và cả nô lệ? Chẳng hạn, có nghĩa là giữ nhật ký trong 3 ngày trên một chủ, nhưng trong 1 ngày trên nô lệ? Cách tốt nhất để đi về nó là gì?

Cảm ơn bạn!


Chào mừng đến với DBA.SE. Câu hỏi này xứng đáng +1 vì tăng trưởng nhật ký nhị phân và chuyển tiếp nhật ký thường được coi là điều hiển nhiên và có thể là nguồn gây ra nhiều vấn đề nếu không được kiểm tra.
RolandoMySQLDBA

Câu trả lời:


12

NÔ LỆ

Nếu nô lệ của bạn không phải là Master, thì Slaves hoàn toàn không cần đăng nhập nhị phân. Bạn có thể đặt giới hạn về số lượng không gian nhật ký chuyển tiếp được tích lũy bởi Slave. Để điều chỉnh nhật ký chuyển tiếp ở 4G, hãy thêm relay_log_space_limitvào /etc/my/.cnf trên mỗi Slave

[mysqld]
relay_log_space_limit=4G

và khởi động lại mysql

Nếu bạn không thể thiết lập điều này, ít nhất bạn nên có một số loại cảnh báo đó SHOW SLAVE STATUS\Gvà kiểm tra giá trị của Relay_Log_Space(tổng số byte được sử dụng bởi nhật ký chuyển tiếp).

BẬC THẦY

Đối với Master, bạn có thể đặt expire_logs_daysthành 1, nhưng có một cảnh báo nghiêm trọng tôi dành cho bạn ...

Nếu sao chép bị hỏng, bạn có 1 ngày để sửa nó. Mặt khác, nhật ký nhị phân trên Master có thể xoay đi và bạn không thể chạy bất kỳ lệnh CHANGE MASTER TO nào để sao chép lại. Tôi sẽ rời đi expire_logs_dayslúc 3 giờ trên Master.

BỀN VỮNG # 1

Nếu bạn có bất kỳ xử lý hàng loạt qua đêm nào, có thể nên chạy các quy trình hàng loạt trên Master với SET SQL_LOG_BIN=0;khi bắt đầu Phiên. Điều này, tất nhiên, sẽ không sao chép thành Slave. Bạn có thể thực hiện Tải hàng loạt tương tự song song với cả hai nô lệ.

BỀN VỮNG # 2

Một điều khác bạn có thể làm để quản lý tích lũy nhật ký nhị phân Master là điều này.

Chạy SHOW SLAVE STATUS\Gtrên cả hai nô lệ. Nhìn vào Relay_Master_Log_File. Điều đó thể hiện nhật ký nhị phân trên Master có lệnh cuối cùng được thực thi trên Slave.

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 10.4.92.250
                Master_User: replicant
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.009677
        Read_Master_Log_Pos: 855227755
             Relay_Log_File: relay-bin.000674
              Relay_Log_Pos: 757296783
      Relay_Master_Log_File: mysql-bin.009590
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 757296646
            Relay_Log_Space: 94274010765
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 80561
1 row in set (0.00 sec)

Trong ví dụ này, Relay_Master_Log_File là mysql-bin.009590. Tất cả các bản ghi nhị phân trước cái này có thể được xóa khỏi Master. Bạn có thể chạy cái này trên Master:

PURGE BINARY LOGS TO 'mysql-bin.009590';

Điều này sẽ xóa các bản ghi cũ hơn và vẫn để lại bản sao trong chiến thuật.

CAUPAT

Nhật ký nhị phân là các tệp biên dịch ser seri (như hàng đợi FIFO) tất cả các giao dịch SQL đã hoàn thành dưới dạng câu lệnh SQL hoặc thay đổi hàng. Nhật ký chuyển tiếp là một tệp thu thập các mục nhật ký nhị phân từ một máy chủ từ xa (còn gọi là Master).

Trong bản sao MySQL

  1. Master phải kích hoạt nhật ký nhị phân của nó
  2. Slave biên dịch nhật ký chuyển tiếp
  3. Khi tất cả SQL trong nhật ký chuyển tiếp được xử lý, nó sẽ bị xóa
  4. Trên Slave, khi có nhiều hơn một bản ghi chuyển tiếp trên Máy chủ DB, nó có thể cho thấy sự sao chép bị tụt lại do luồng IO đang thu thập SQL từ Master nhanh hơn mà luồng SQL có thể xử lý nhật ký chuyển tiếp.
  5. Sử dụng rơle_log_space_limit ngăn không cho sao chép chồng chất và có khả năng lấp đầy đĩa. Nhật ký chuyển tiếp xoay ra dựa trên quy tắc số 3
  6. Máy chủ DB có thể là cả Master và Slave. Đó là tình huống duy nhất mà Slave phải kích hoạt nhật ký nhị phân. Trong kịch bản đó, Máy chủ DB sẽ có cả Nhật ký nhị phân và Nhật ký chuyển tiếp.

Nếu bạn chuyển sang Slave và bạn muốn biến nó thành Master

  • dịch vụ mysql dừng
  • Thêm log-bin=mysql-binvào /etc/my.cnf trên Slave
  • dịch vụ mysql bắt đầu

Bạn sẽ phải thiết lập sao chép các nô lệ khác cho Master mới được thăng cấp và đảm bảo dữ liệu trên Slave khớp với Master mới được thăng cấp

CẬP NHẬT 2012-08-13 17:47 EDT

Theo tài liệu MySQL trên relay-logtùy chọn , bạn nên xác định nó. Đây là lý do tại sao:

Do cách thức phân tích tùy chọn máy chủ của MySQL, nếu bạn chỉ định tùy chọn này, bạn phải cung cấp một giá trị; tên cơ sở mặc định chỉ được sử dụng nếu tùy chọn không thực sự được chỉ định. Nếu bạn sử dụng tùy chọn --relay-log mà không chỉ định giá trị, hành vi không mong muốn có thể xảy ra; hành vi này phụ thuộc vào các tùy chọn khác được sử dụng, thứ tự mà chúng được chỉ định và liệu chúng được chỉ định trên dòng lệnh hoặc trong tệp tùy chọn. Để biết thêm thông tin về cách MySQL xử lý các tùy chọn máy chủ, hãy xem Phần 4.2.3, Tùy chọn chương trình chỉ định Tùy chọn Chương trình.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
Paul White 9
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.