mirror of
https://github.com/MariaDB/server.git
synced 2025-07-04 01:23:45 +03:00
Problem ======== SQL statements close to the size of max_allowed_packet produce binary log events larger than max_allowed_packet. The reason why this failure is occuring is because the event length is more than the total size of the max_allowed_packet + max_event_header length. Now since the event length exceeds this size master Dump thread is unable to send the packet on to the slave. That can happen e.g with row-based replication in Update_rows event. Fix ==== The problem was fixed by increasing the max_allowed_packet for the slave's threads (IO/SQL) by increasing it to 1GB. This is done using the new server option included which is used to regulate the max_allowed_packet of the slave thread (IO/SQL). This causes the large packets to be received by the slave and apply it successfully. sql/log_event.h: Added the new option in the log_event.h file. sql/mysqld.cc: Added a new option to the server. sql/slave.cc: Increasing the session max_allowed_packet to a large value , i.e. not taking global(max_allowed) into consideration, for the slave's threads.
204 lines
8.3 KiB
Plaintext
204 lines
8.3 KiB
Plaintext
SET @start_global_value = @@global.max_allowed_packet;
|
|
SELECT @start_global_value;
|
|
@start_global_value
|
|
1048576
|
|
SET @@global.max_allowed_packet = DEFAULT;
|
|
'#--------------------FN_DYNVARS_070_01-------------------------#'
|
|
SET @@global.max_allowed_packet = 1000;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '1000'
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SET @@global.max_allowed_packet = DEFAULT;
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = 20000;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SET @@session.max_allowed_packet = DEFAULT;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
'#--------------------FN_DYNVARS_070_02-------------------------#'
|
|
SET @@global.max_allowed_packet = DEFAULT;
|
|
SELECT @@global.max_allowed_packet = 1048576;
|
|
@@global.max_allowed_packet = 1048576
|
|
1
|
|
'#--------------------FN_DYNVARS_070_03-------------------------#'
|
|
SET @@global.max_allowed_packet = 1024;
|
|
Warnings:
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1024
|
|
SET @@global.max_allowed_packet = 1025;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '1025'
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1024
|
|
SET @@global.max_allowed_packet = 1073741824;
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1073741824
|
|
SET @@global.max_allowed_packet = 1073741823;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '1073741823'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1073740800
|
|
'#--------------------FN_DYNVARS_070_04-------------------------#'
|
|
SET @@session.max_allowed_packet = 1024;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = 1025;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = 65535;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = 1073741824;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = 1073741823;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
'#------------------FN_DYNVARS_070_05-----------------------#'
|
|
SET @@global.max_allowed_packet = 0;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '0'
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1024
|
|
SET @@global.max_allowed_packet = -1024;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '-1024'
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1024
|
|
SET @@global.max_allowed_packet = 1023;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '1023'
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1024
|
|
SET @@global.max_allowed_packet = 10737418241;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '10737418241'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1073741824
|
|
SET @@global.max_allowed_packet = 65530.34;
|
|
ERROR 42000: Incorrect argument type to variable 'max_allowed_packet'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1073741824
|
|
SET @@global.max_allowed_packet = test;
|
|
ERROR 42000: Incorrect argument type to variable 'max_allowed_packet'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1073741824
|
|
SET @@session.max_allowed_packet = 0;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = 1023;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = -2;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = 65530.34;
|
|
ERROR 42000: Incorrect argument type to variable 'max_allowed_packet'
|
|
SET @@session.max_allowed_packet = 10737418241;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
SET @@session.max_allowed_packet = test;
|
|
ERROR 42000: Incorrect argument type to variable 'max_allowed_packet'
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|
|
'#------------------FN_DYNVARS_070_06-----------------------#'
|
|
SELECT @@global.max_allowed_packet = VARIABLE_VALUE
|
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
|
WHERE VARIABLE_NAME='max_allowed_packet';
|
|
@@global.max_allowed_packet = VARIABLE_VALUE
|
|
1
|
|
'#------------------FN_DYNVARS_070_07-----------------------#'
|
|
SELECT @@session.max_allowed_packet = VARIABLE_VALUE
|
|
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
|
|
WHERE VARIABLE_NAME='max_allowed_packet';
|
|
@@session.max_allowed_packet = VARIABLE_VALUE
|
|
1
|
|
'#------------------FN_DYNVARS_070_08-----------------------#'
|
|
SET @@global.max_allowed_packet = TRUE;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '1'
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1024
|
|
SET @@global.max_allowed_packet = FALSE;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect max_allowed_packet value: '0'
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1024
|
|
'#---------------------FN_DYNVARS_070_09----------------------#'
|
|
SET @@global.max_allowed_packet = 2048;
|
|
Warnings:
|
|
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
|
SELECT @@max_allowed_packet = @@global.max_allowed_packet;
|
|
@@max_allowed_packet = @@global.max_allowed_packet
|
|
0
|
|
'#---------------------FN_DYNVARS_070_10----------------------#'
|
|
SET @@max_allowed_packet = 100000;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@max_allowed_packet = @@local.max_allowed_packet;
|
|
@@max_allowed_packet = @@local.max_allowed_packet
|
|
1
|
|
SELECT @@local.max_allowed_packet = @@session.max_allowed_packet;
|
|
@@local.max_allowed_packet = @@session.max_allowed_packet
|
|
1
|
|
'#---------------------FN_DYNVARS_070_11----------------------#'
|
|
SET max_allowed_packet = 1024;
|
|
ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value
|
|
SELECT @@max_allowed_packet;
|
|
@@max_allowed_packet
|
|
1048576
|
|
SELECT local.max_allowed_packet;
|
|
ERROR 42S02: Unknown table 'local' in field list
|
|
SELECT session.max_allowed_packet;
|
|
ERROR 42S02: Unknown table 'session' in field list
|
|
SELECT max_allowed_packet = @@session.max_allowed_packet;
|
|
ERROR 42S22: Unknown column 'max_allowed_packet' in 'field list'
|
|
SET @@global.max_allowed_packet = @start_global_value;
|
|
SELECT @@global.max_allowed_packet;
|
|
@@global.max_allowed_packet
|
|
1048576
|
|
SELECT @@session.max_allowed_packet;
|
|
@@session.max_allowed_packet
|
|
1048576
|