Làm cách nào để tìm max_allowed_packet trong MySQL?

hỏng nhật ký nhị phân, gặp lỗi nghiêm trọng 1236 từ chủ, max_allowed_packet, Miguel Angel Nieto, Slave_max_allowed_packet 2 Bình luận

The combination of max_allowed_packet variable and replication in MySQL is a common source of headaches. In a nutshell, max_allowed_packet is the maximum size of a MySQL network protocol packet that the server can create or read. It has a default value of 1MB (<= 5.6.5) or 4MB (>= 5.6.6) and a maximum size of 1GB. This adds some constraints in our replication environment:

  • Máy chủ chính không nên ghi các sự kiện vào nhật ký nhị phân lớn hơn max_allowed_packet
  • Tất cả các nô lệ trong chuỗi sao chép phải có cùng max_allowed_packet với máy chủ chính

Đôi khi, ngay cả khi tuân theo hai quy tắc cơ bản đó, chúng ta vẫn có thể gặp vấn đề

Ví dụ: có những tình huống (còn gọi là lỗi) khi chủ ghi nhiều dữ liệu hơn giới hạn max_allowed_packet khiến các nô lệ ngừng hoạt động. Để sửa lỗi này, Oracle đã tạo một biến mới có tên là Slave_max_allowed_packet. Biến cấu hình mới này có sẵn từ 5. 1. 64, 5. 5. 26 và 5. 6. 6 ghi đè giá trị max_allowed_packet cho chuỗi nô lệ. Do đó, bất kể giá trị max_allowed_packet là bao nhiêu, các luồng của nô lệ sẽ có giới hạn 1GB, giá trị mặc định của Slave_max_allowed_packet. Thủ thuật hay hoạt động như mong đợi

Đôi khi, ngay cả với cách giải quyết đó, chúng tôi có thể gặp lỗi max_allowed_packet trong các máy chủ nô lệ. Điều đó có nghĩa là có một gói lớn hơn 1GB, điều không nên xảy ra trong tình huống bình thường. Tại sao? . Hãy xem ví dụ sau

Slave ngừng hoạt động với thông báo sau

Vỏ bọc

1

Last_IO_Error. Gặp phải lỗi nghiêm trọng 1236 từ . master when reading data from binary log: 'nhật ký sự kiện đã vượt quá max_allowed_packet;

Phần quan trọng là "có lỗi nghiêm trọng 1236 từ chủ". Master không thể đọc sự kiện mà nó đã ghi vào nhật ký nhị phân vài giây trước. Để kiểm tra vấn đề chúng ta có thể

  • Sử dụng mysqlbinlog để đọc nhật ký nhị phân từ vị trí không thành công với –start-position

Đây là một ví dụ được lấy từ Diễn đàn Percona của chúng tôi

Vỏ bọc

1

2

3

4

5

6

7

8

#121003 5. 22. 26 id máy chủ 1 end_log_pos 398528

# sự kiện không xác định

# tại 398528

#960218 6. 48. 44 id máy chủ 1813111337 end_log_pos 1835008

# sự kiện không xác định

LỖI. Lỗi trong Nhật ký sự kiện. . read_log_event(). 'Sự kiện quá lớn', data_len. 1953066613, event_type. 8

DÒNG KHÁC ;

# Kết thúc tệp nhật ký

Kiểm tra kích thước của sự kiện, 1953066613 byte. Hoặc thông báo “Sự kiện không xác định”. Một cái gì đó rõ ràng là sai ở đó. Một điều thông thường khác cần kiểm tra là id máy chủ đôi khi không tương ứng với giá trị thực. Trong ví dụ này, người đã đăng sự kiện nhật ký nhị phân đã xác nhận rằng id máy chủ đã sai

  • Kiểm tra nhật ký lỗi của chủ

Vỏ bọc

1

[LỖI] Lỗi trong Log_event:. read_log_event(). 'Sự kiện quá lớn', data_len. 1953066613, event_type. 8

Một lần nữa, sự kiện lớn hơn dự kiến. Không có cách nào mà chủ và nô lệ có thể đọc/ghi nó, vì vậy giải pháp là bỏ qua sự kiện đó trong nô lệ và xoay nhật ký trên chủ. Sau đó, sử dụng pt-table-checksum để kiểm tra tính nhất quán của dữ liệu

mysql 5. 6 bao gồm tổng kiểm tra sao chép để tránh các sự cố với lỗi nhật ký. Bạn có thể đọc thêm về nó trong bài đăng trên blog của Stephan

Phần kết luận

Lỗi trên máy chủ nô lệ về max_allowed_packet có thể do nhiều nguyên nhân khác nhau. Mặc dù lỗi nhật ký nhị phân không phổ biến, nhưng đây là điều đáng để kiểm tra khi bạn cạn kiệt ý tưởng

max_allowed_packet trong MySQL ở đâu?

Bạn có hai giá trị max_allowed_packet trong MySQL. một ở phía máy khách. phần [mysql], [mysqldump] , [client] và hơn thế nữa. một ở phía máy chủ. phần [mysqld] .

Làm cách nào để tìm max_allowed_packet?

Đặt max_allowed_packet .
Mở "của tôi. ini" trong thư mục cài đặt máy chủ MySQL
Tìm kiếm thông số "max_allowed_packet". Nếu file chưa có thì thêm tham số vào file
Đặt giá trị khi cần. .
Khởi động lại máy chủ MySQL

max_allowed_packet mặc định trong MySQL là gì?

Giá trị max_allowed_packet mặc định của máy chủ là 64MB . Bạn có thể tăng mức này nếu máy chủ cần xử lý các truy vấn lớn (ví dụ: nếu bạn đang làm việc với các cột BLOB lớn). Ví dụ: để đặt biến thành 128 MB, hãy khởi động máy chủ như thế này. $> mysqld --max_allowed_packet=128M.

Max_allowed_packet nên là gì?

Tóm lại, max_allowed_packet là kích thước tối đa của gói giao thức mạng MySQL mà máy chủ có thể tạo hoặc đọc . Nó có giá trị mặc định là 1MB (