Ghi chú. Biến hệ thống, slave_max_allowed_packet
chỉ xác định kích thước gói lớn nhất mà nô lệ có thể đọc từ chủ. Do đó, sửa đổi giá trị này không giải quyết được lỗi
Tham khảo bảng sau để biết danh sách các cập nhật chính được thực hiện cho trang này
Ngày phát hànhMô tả thay đổiSep-05-2022NAMang lại trang này trong thư mục Tài liệu nguồn tương ứng. Sep-09-20211. 71Tài liệu mớiĐể kiểm tra giá trị hiện tại của max_allowed_packet là gì, lệnh show biến được sử dụng. Nó được đưa ra như sau -
mysql> show variables like 'max_allowed_packet';
Sau đây là đầu ra
+--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 4194304 | +--------------------+---------+ 1 row in set [0.04 sec]
Giá trị của max_allowed_packet có thể được thay đổi trong 'my. ini' ở phía máy khách. Truy vấn cho điều đó được đưa ra như sau -
Nếu giá trị không được áp dụng và cũng để nó không được đặt lại sau khi khởi động lại máy chủ MySQL, hãy thêm vào tệp cấu hình
[mysqld] max_allowed_packet=128M
Và khởi động lại máy chủ MySQL
service mysql restart
Máy khách MySQL có giá trị riêng, có thể thay đổi giá trị này, chẳng hạn như khi khởi động máy khách MySQL
Có một số cách để thay đổi giá trị max_allowed_packet. Nó chủ yếu được đặt thành giá trị mặc định, là 16MBĐể thay đổi nó, hãy làm theo điều này
$> mysql --max_allowed_packet=32M
Điều này sẽ đặt giá trị của máy khách thành 32 MB. Bạn có thể thay đổi giá trị theo yêu cầu của bạn
Thay đổi giá trị máy chủ cũng rất quan trọng, đặc biệt khi bạn đang xử lý các truy vấn lớn. Thông thường, giá trị mặc định của máy chủ là 16 MB
Hãy nhân đôi giá trị của máy chủ, như chúng ta đã làm với chương trình của máy khách
$> mysqld --max_allowed_packet=32M
Cuối cùng, bạn cũng có thể đặt giá trị bằng tệp cấu hình. Đây là cách nó được thực hiện
[mysqld]
max_allowed_packet=32M
Điều này sẽ thay đổi kích thước máy chủ thành 32 MB, do đó cho phép máy chủ chuyển các truy vấn lớn hơn mà không gặp bất kỳ lỗi nào
- DZone
- Kỹ thuật dữ liệu
- cơ sở dữ liệu
- max_allowed_packet và lỗi nhật ký nhị phân trong MySQL
max_allowed_packet và lỗi nhật ký nhị phân trong MySQL
qua
Pyotr Zaitsev
·Tháng 4. 13, 15 · Phỏng vấnGiống
Nhận xét
Tiết kiệm
tiếng riu ríu
Chia sẻ
13. 02K Lượt xem
Tham gia cộng đồng DZone và có được trải nghiệm thành viên đầy đủ
Tham gia miễn phí[Bài viết này được viết bởi Miguel Angel Nieto]
The combination of 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.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] trong đó thiết bị chính ghi nhiều dữ liệu hơn giới hạn max_allowed_packet khiến các thiết bị phụ 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
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master'
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
#121003 5:22:26 server id 1 end_log_pos 398528 # Unknown event # at 398528 #960218 6:48:44 server id 1813111337 end_log_pos 1835008 # Unknown event ERROR: Error in Log_event::read_log_event[]: 'Event too big', data_len: 1953066613, event_type: 8 DELIMITER ; # End of log file
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ủ
[ERROR] Error in Log_event::read_log_event[]: 'Event too big', 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 hỏng nhật ký. Bạn có thể đọc thêm về điều này 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