Commit 9aa79dc5 authored by Manish Kumar's avatar Manish Kumar

BUG#12400221 - 60926: BINARY LOG EVENTS LARGER THAN MAX_ALLOWED_PACKET

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.
parent c64b88d6
...@@ -9,7 +9,7 @@ change master to master_log_pos=MASTER_LOG_POS; ...@@ -9,7 +9,7 @@ change master to master_log_pos=MASTER_LOG_POS;
Read_Master_Log_Pos = '75' Read_Master_Log_Pos = '75'
start slave; start slave;
include/wait_for_slave_io_error.inc [errno=1236] include/wait_for_slave_io_error.inc [errno=1236]
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'' Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event''
include/stop_slave_sql.inc include/stop_slave_sql.inc
show master status; show master status;
File Position Binlog_Do_DB Binlog_Ignore_DB File Position Binlog_Do_DB Binlog_Ignore_DB
......
include/master-slave.inc include/master-slave.inc
[connection master] [connection master]
call mtr.add_suppression("Slave I/O: Got a packet bigger than 'max_allowed_packet' bytes, Error_code: 1153"); call mtr.add_suppression("Slave I/O: Got a packet bigger than 'slave_max_allowed_packet' bytes, Error_code: 1153");
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log:"); call mtr.add_suppression("Log entry on master is longer than slave_max_allowed_packet");
drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________; drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
create database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________; create database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
SET @@global.max_allowed_packet=1024; SET @@global.max_allowed_packet=1024;
...@@ -30,14 +30,14 @@ include/start_slave.inc ...@@ -30,14 +30,14 @@ include/start_slave.inc
CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM; CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048'); INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
include/wait_for_slave_io_error.inc [errno=1153] include/wait_for_slave_io_error.inc [errno=1153]
Last_IO_Error = 'Got a packet bigger than 'max_allowed_packet' bytes' Last_IO_Error = 'Got a packet bigger than 'slave_max_allowed_packet' bytes'
include/stop_slave_sql.inc include/stop_slave_sql.inc
include/rpl_reset.inc include/rpl_reset.inc
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM; CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet)); INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
include/wait_for_slave_io_error.inc [errno=1236] include/wait_for_slave_io_error.inc [errno=1153]
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'' Last_IO_Error = 'Got a packet bigger than 'slave_max_allowed_packet' bytes'
STOP SLAVE; STOP SLAVE;
RESET SLAVE; RESET SLAVE;
RESET MASTER; RESET MASTER;
...@@ -52,6 +52,7 @@ SET @@global.max_allowed_packet= 1024; ...@@ -52,6 +52,7 @@ SET @@global.max_allowed_packet= 1024;
Warnings: Warnings:
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length' Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SET @@global.net_buffer_length= 1024; SET @@global.net_buffer_length= 1024;
SET @@global.slave_max_allowed_packet= 1073741824;
DROP TABLE t1; DROP TABLE t1;
RESET SLAVE; RESET SLAVE;
include/rpl_end.inc include/rpl_end.inc
-O max_allowed_packet=1024 -O net_buffer_length=1024 -O max_allowed_packet=1024 -O net_buffer_length=1024 -O slave_max_allowed_packet=1024
...@@ -11,9 +11,8 @@ ...@@ -11,9 +11,8 @@
# max-out size db name # max-out size db name
source include/master-slave.inc; source include/master-slave.inc;
source include/have_binlog_format_row.inc; source include/have_binlog_format_row.inc;
call mtr.add_suppression("Slave I/O: Got a packet bigger than 'max_allowed_packet' bytes, Error_code: 1153"); call mtr.add_suppression("Slave I/O: Got a packet bigger than 'slave_max_allowed_packet' bytes, Error_code: 1153");
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log:"); call mtr.add_suppression("Log entry on master is longer than slave_max_allowed_packet");
let $db= DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________; let $db= DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
disable_warnings; disable_warnings;
eval drop database if exists $db; eval drop database if exists $db;
...@@ -23,6 +22,7 @@ eval create database $db; ...@@ -23,6 +22,7 @@ eval create database $db;
connection master; connection master;
let $old_max_allowed_packet= `SELECT @@global.max_allowed_packet`; let $old_max_allowed_packet= `SELECT @@global.max_allowed_packet`;
let $old_net_buffer_length= `SELECT @@global.net_buffer_length`; let $old_net_buffer_length= `SELECT @@global.net_buffer_length`;
let $old_slave_max_allowed_packet= `SELECT @@global.slave_max_allowed_packet`;
SET @@global.max_allowed_packet=1024; SET @@global.max_allowed_packet=1024;
SET @@global.net_buffer_length=1024; SET @@global.net_buffer_length=1024;
...@@ -124,8 +124,8 @@ INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), R ...@@ -124,8 +124,8 @@ INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), R
connection slave; connection slave;
# The slave I/O thread must stop after receiving # The slave I/O thread must stop after receiving
# 1236=ER_MASTER_FATAL_ERROR_READING_BINLOG error message from master. # 1153 = ER_NET_PACKET_TOO_LARGE
--let $slave_io_errno= 1236 --let $slave_io_errno= 1153
--let $show_slave_io_error= 1 --let $show_slave_io_error= 1
--source include/wait_for_slave_io_error.inc --source include/wait_for_slave_io_error.inc
...@@ -166,6 +166,7 @@ connection master; ...@@ -166,6 +166,7 @@ connection master;
DROP TABLE t1; DROP TABLE t1;
eval SET @@global.max_allowed_packet= $old_max_allowed_packet; eval SET @@global.max_allowed_packet= $old_max_allowed_packet;
eval SET @@global.net_buffer_length= $old_net_buffer_length; eval SET @@global.net_buffer_length= $old_net_buffer_length;
eval SET @@global.slave_max_allowed_packet= $old_slave_max_allowed_packet;
# slave is stopped # slave is stopped
connection slave; connection slave;
DROP TABLE t1; DROP TABLE t1;
......
############## mysql-test\t\slave_max_allowed_packet_basic.test ##################
# #
# Variable Name: slave_max_allowed_packet #
# Scope: GLOBAL #
# Access Type: Dynamic #
# Data Type: numeric #
# Default Value:1073741824 #
# Range: 1024 - 1073741824 #
# #
# #
# #
# Description: Test Cases of Dynamic System Variable slave_max_allowed_packet #
# that checks the behavior of this variable in the following ways#
# * Default Value #
# * Valid & Invalid values #
# * Scope & Access method #
# * Data Integrity #
# #
###############################################################################
--source include/load_sysvars.inc
########################################################################
# START OF slave_max_allowed_packet TESTS #
########################################################################
###########################################################################
# Saving initial value of slave_max_allowed_packet in a temporary variable#
###########################################################################
SET @start_value = @@global.slave_max_allowed_packet;
SELECT @start_value;
--echo '#--------------------FN_DYNVARS_072_01------------------------#'
########################################################################
# Display the DEFAULT value of slave_max_allowed_packet #
########################################################################
SET @@global.slave_max_allowed_packet = 5000;
SET @@global.slave_max_allowed_packet = DEFAULT;
SELECT @@global.slave_max_allowed_packet;
--echo '#---------------------FN_DYNVARS_072_02-------------------------#'
###############################################
# Verify default value of variable #
###############################################
SET @@global.slave_max_allowed_packet = @start_value;
SELECT @@global.slave_max_allowed_packet = 1073741824;
--echo 'Bug# 34876: Incorrect Default Value is assigned to variable';
--echo '#--------------------FN_DYNVARS_072_03------------------------#'
########################################################################
# Change the value of slave_max_allowed_packet to a valid value #
########################################################################
SET @@global.slave_max_allowed_packet = 1024;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = 1073741824;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = 1073741824;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = 1025;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = 65535;
SELECT @@global.slave_max_allowed_packet;
--echo 'Bug# 34877: Invalid Values are coming in variable on assigning valid values';
--echo '#--------------------FN_DYNVARS_072_04-------------------------#'
###########################################################################
# Change the value of slave_max_allowed_packet to invalid value #
###########################################################################
SET @@global.slave_max_allowed_packet = -1;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = 100000000000;
SELECT @@global.slave_max_allowed_packet;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.slave_max_allowed_packet = 10000.01;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = -1024;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = 4294967296;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = 1023;
SELECT @@global.slave_max_allowed_packet;
--echo 'Bug # 34837: Errors are not coming on assigning invalid values to variable';
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.slave_max_allowed_packet = ON;
SELECT @@global.slave_max_allowed_packet;
--Error ER_WRONG_TYPE_FOR_VAR
SET @@global.slave_max_allowed_packet = 'test';
SELECT @@global.slave_max_allowed_packet;
--echo '#-------------------FN_DYNVARS_072_05----------------------------#'
###########################################################################
# Test if accessing session slave_max_allowed_packet gives error #
###########################################################################
--Error ER_GLOBAL_VARIABLE
SET @@session.slave_max_allowed_packet = 4096;
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
SELECT @@session.slave_max_allowed_packet;
--echo '#----------------------FN_DYNVARS_072_06------------------------#'
##############################################################################
# Check if the value in GLOBAL & SESSION Tables matches values in variable #
##############################################################################
SELECT @@global.slave_max_allowed_packet = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='slave_max_allowed_packet';
SELECT @@slave_max_allowed_packet = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
WHERE VARIABLE_NAME='slave_max_allowed_packet';
--echo '#---------------------FN_DYNVARS_072_07----------------------#'
###################################################################
# Check if TRUE and FALSE values can be used on variable #
###################################################################
SET @@global.slave_max_allowed_packet = TRUE;
SELECT @@global.slave_max_allowed_packet;
SET @@global.slave_max_allowed_packet = FALSE;
SELECT @@global.slave_max_allowed_packet;
--echo '#---------------------FN_DYNVARS_072_08----------------------#'
########################################################################################################
# Check if accessing variable with SESSION,LOCAL and without SCOPE points to same session variable #
########################################################################################################
SET @@global.slave_max_allowed_packet = 5000;
SELECT @@slave_max_allowed_packet = @@global.slave_max_allowed_packet;
--echo '#---------------------FN_DYNVARS_072_09----------------------#'
################################################################################
# Check if slave_max_allowed_packet can be accessed with and without @@ sign #
################################################################################
--Error ER_GLOBAL_VARIABLE
SET slave_max_allowed_packet = 6000;
SELECT @@slave_max_allowed_packet;
--Error ER_PARSE_ERROR
SET local.slave_max_allowed_packet = 7000;
--Error ER_UNKNOWN_TABLE
SELECT local.slave_max_allowed_packet;
--Error ER_PARSE_ERROR
SET global.slave_max_allowed_packet = 8000;
--Error ER_UNKNOWN_TABLE
SELECT global.slave_max_allowed_packet;
--Error ER_BAD_FIELD_ERROR
SELECT slave_max_allowed_packet = @@session.slave_max_allowed_packet;
##############################
# Restore initial value #
##############################
SET @@global.slave_max_allowed_packet = @start_value;
SELECT @@global.slave_max_allowed_packet;
########################################################################
# END OF slave_max_allowed_packet TESTS #
########################################################################
...@@ -7,6 +7,7 @@ SET @@global.max_allowed_packet = DEFAULT; ...@@ -7,6 +7,7 @@ SET @@global.max_allowed_packet = DEFAULT;
SET @@global.max_allowed_packet = 1000; SET @@global.max_allowed_packet = 1000;
Warnings: Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '1000' Warning 1292 Truncated incorrect max_allowed_packet value: '1000'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SET @@global.max_allowed_packet = DEFAULT; SET @@global.max_allowed_packet = DEFAULT;
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
...@@ -25,10 +26,14 @@ SELECT @@global.max_allowed_packet = 1048576; ...@@ -25,10 +26,14 @@ SELECT @@global.max_allowed_packet = 1048576;
1 1
'#--------------------FN_DYNVARS_070_03-------------------------#' '#--------------------FN_DYNVARS_070_03-------------------------#'
SET @@global.max_allowed_packet = 1024; SET @@global.max_allowed_packet = 1024;
Warnings:
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
1024 1024
SET @@global.max_allowed_packet = 1025; SET @@global.max_allowed_packet = 1025;
Warnings:
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
1024 1024
...@@ -71,18 +76,21 @@ SELECT @@session.max_allowed_packet; ...@@ -71,18 +76,21 @@ SELECT @@session.max_allowed_packet;
SET @@global.max_allowed_packet = 0; SET @@global.max_allowed_packet = 0;
Warnings: Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '0' Warning 1292 Truncated incorrect max_allowed_packet value: '0'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
1024 1024
SET @@global.max_allowed_packet = -1024; SET @@global.max_allowed_packet = -1024;
Warnings: Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '-1024' Warning 1292 Truncated incorrect max_allowed_packet value: '-1024'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
1024 1024
SET @@global.max_allowed_packet = 1023; SET @@global.max_allowed_packet = 1023;
Warnings: Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '1023' Warning 1292 Truncated incorrect max_allowed_packet value: '1023'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
1024 1024
...@@ -146,17 +154,21 @@ WHERE VARIABLE_NAME='max_allowed_packet'; ...@@ -146,17 +154,21 @@ WHERE VARIABLE_NAME='max_allowed_packet';
SET @@global.max_allowed_packet = TRUE; SET @@global.max_allowed_packet = TRUE;
Warnings: Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '1' Warning 1292 Truncated incorrect max_allowed_packet value: '1'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
1024 1024
SET @@global.max_allowed_packet = FALSE; SET @@global.max_allowed_packet = FALSE;
Warnings: Warnings:
Warning 1292 Truncated incorrect max_allowed_packet value: '0' Warning 1292 Truncated incorrect max_allowed_packet value: '0'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
1024 1024
'#---------------------FN_DYNVARS_070_09----------------------#' '#---------------------FN_DYNVARS_070_09----------------------#'
SET @@global.max_allowed_packet = 2048; SET @@global.max_allowed_packet = 2048;
Warnings:
Warning 1105 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; SELECT @@max_allowed_packet = @@global.max_allowed_packet;
@@max_allowed_packet = @@global.max_allowed_packet @@max_allowed_packet = @@global.max_allowed_packet
0 0
......
...@@ -23,6 +23,8 @@ SELECT @@session.net_buffer_length; ...@@ -23,6 +23,8 @@ SELECT @@session.net_buffer_length;
'#--------------------FN_DYNVARS_070_02-------------------------#' '#--------------------FN_DYNVARS_070_02-------------------------#'
## Setting value of max_allowed packet and net_buffer_length to 1024 ## ## Setting value of max_allowed packet and net_buffer_length to 1024 ##
SET @@global.max_allowed_packet = 1024; SET @@global.max_allowed_packet = 1024;
Warnings:
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SET @@global.net_buffer_length = 1024; SET @@global.net_buffer_length = 1024;
SELECT @@global.max_allowed_packet; SELECT @@global.max_allowed_packet;
@@global.max_allowed_packet @@global.max_allowed_packet
......
...@@ -63,12 +63,14 @@ SELECT @@global.net_buffer_length; ...@@ -63,12 +63,14 @@ SELECT @@global.net_buffer_length;
SET @@global.net_buffer_length = 1048577; SET @@global.net_buffer_length = 1048577;
Warnings: Warnings:
Warning 1292 Truncated incorrect net_buffer_length value: '1048577' Warning 1292 Truncated incorrect net_buffer_length value: '1048577'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.net_buffer_length; SELECT @@global.net_buffer_length;
@@global.net_buffer_length @@global.net_buffer_length
1048576 1048576
SET @@global.net_buffer_length = 104857633; SET @@global.net_buffer_length = 104857633;
Warnings: Warnings:
Warning 1292 Truncated incorrect net_buffer_length value: '104857633' Warning 1292 Truncated incorrect net_buffer_length value: '104857633'
Warning 1105 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
SELECT @@global.net_buffer_length; SELECT @@global.net_buffer_length;
@@global.net_buffer_length @@global.net_buffer_length
1048576 1048576
......
--source suite/sys_vars/inc/slave_max_allowed_packet_basic.inc
...@@ -1122,7 +1122,7 @@ failed my_b_read")); ...@@ -1122,7 +1122,7 @@ failed my_b_read"));
Log_event *res= 0; Log_event *res= 0;
#ifndef max_allowed_packet #ifndef max_allowed_packet
THD *thd=current_thd; THD *thd=current_thd;
uint max_allowed_packet= thd ? thd->variables.max_allowed_packet : ~(ulong)0; uint max_allowed_packet= thd ? slave_max_allowed_packet:~(ulong)0;
#endif #endif
if (data_len > max_allowed_packet) if (data_len > max_allowed_packet)
......
...@@ -275,6 +275,13 @@ struct sql_ex_info ...@@ -275,6 +275,13 @@ struct sql_ex_info
MAX_SIZE_LOG_EVENT_STATUS + /* status */ \ MAX_SIZE_LOG_EVENT_STATUS + /* status */ \
NAME_LEN + 1) NAME_LEN + 1)
/*
The new option is added to handle large packets that are sent from the master
to the slave. It is used to increase the thd(max_allowed) for both the
DUMP thread on the master and the SQL/IO thread on the slave.
*/
#define MAX_MAX_ALLOWED_PACKET 1024*1024*1024
/* /*
Event header offsets; Event header offsets;
these point to places inside the fixed header. these point to places inside the fixed header.
......
...@@ -1944,6 +1944,7 @@ extern ulong slave_net_timeout, slave_trans_retries; ...@@ -1944,6 +1944,7 @@ extern ulong slave_net_timeout, slave_trans_retries;
extern uint max_user_connections; extern uint max_user_connections;
extern ulong what_to_log,flush_time; extern ulong what_to_log,flush_time;
extern ulong query_buff_size; extern ulong query_buff_size;
extern ulong slave_max_allowed_packet;
extern ulong max_prepared_stmt_count, prepared_stmt_count; extern ulong max_prepared_stmt_count, prepared_stmt_count;
extern ulong binlog_cache_size, open_files_limit; extern ulong binlog_cache_size, open_files_limit;
extern ulonglong max_binlog_cache_size; extern ulonglong max_binlog_cache_size;
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "mysys_err.h" #include "mysys_err.h"
#include "events.h" #include "events.h"
#include "debug_sync.h" #include "debug_sync.h"
#include "log_event.h"
#include "../storage/myisam/ha_myisam.h" #include "../storage/myisam/ha_myisam.h"
...@@ -574,6 +575,7 @@ static const char *slave_exec_mode_str= "STRICT"; ...@@ -574,6 +575,7 @@ static const char *slave_exec_mode_str= "STRICT";
ulong thread_cache_size=0, thread_pool_size= 0; ulong thread_cache_size=0, thread_pool_size= 0;
ulong binlog_cache_size=0; ulong binlog_cache_size=0;
ulonglong max_binlog_cache_size=0; ulonglong max_binlog_cache_size=0;
ulong slave_max_allowed_packet= 0;
ulong query_cache_size=0; ulong query_cache_size=0;
ulong refresh_version; /* Increments on each reload */ ulong refresh_version; /* Increments on each reload */
query_id_t global_query_id; query_id_t global_query_id;
...@@ -5572,6 +5574,7 @@ enum options_mysqld ...@@ -5572,6 +5574,7 @@ enum options_mysqld
OPT_KEY_CACHE_DIVISION_LIMIT, OPT_KEY_CACHE_AGE_THRESHOLD, OPT_KEY_CACHE_DIVISION_LIMIT, OPT_KEY_CACHE_AGE_THRESHOLD,
OPT_LONG_QUERY_TIME, OPT_LONG_QUERY_TIME,
OPT_LOWER_CASE_TABLE_NAMES, OPT_MAX_ALLOWED_PACKET, OPT_LOWER_CASE_TABLE_NAMES, OPT_MAX_ALLOWED_PACKET,
OPT_SLAVE_MAX_ALLOWED_PACKET,
OPT_MAX_BINLOG_CACHE_SIZE, OPT_MAX_BINLOG_SIZE, OPT_MAX_BINLOG_CACHE_SIZE, OPT_MAX_BINLOG_SIZE,
OPT_MAX_CONNECTIONS, OPT_MAX_CONNECT_ERRORS, OPT_MAX_CONNECTIONS, OPT_MAX_CONNECT_ERRORS,
OPT_MAX_DELAYED_THREADS, OPT_MAX_HEP_TABLE_SIZE, OPT_MAX_DELAYED_THREADS, OPT_MAX_HEP_TABLE_SIZE,
...@@ -6700,6 +6703,10 @@ thread is in the relay logs.", ...@@ -6700,6 +6703,10 @@ thread is in the relay logs.",
&global_system_variables.max_allowed_packet, &global_system_variables.max_allowed_packet,
&max_system_variables.max_allowed_packet, 0, GET_ULONG, &max_system_variables.max_allowed_packet, 0, GET_ULONG,
REQUIRED_ARG, 1024*1024L, 1024, 1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0}, REQUIRED_ARG, 1024*1024L, 1024, 1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0},
{"slave_max_allowed_packet", OPT_SLAVE_MAX_ALLOWED_PACKET,
"The maximum packet length to sent successfully from the master to slave.",
&slave_max_allowed_packet, &slave_max_allowed_packet, 0, GET_ULONG,
REQUIRED_ARG, MAX_MAX_ALLOWED_PACKET, 1024, MAX_MAX_ALLOWED_PACKET, MALLOC_OVERHEAD, 1024, 0},
{"max_binlog_cache_size", OPT_MAX_BINLOG_CACHE_SIZE, {"max_binlog_cache_size", OPT_MAX_BINLOG_CACHE_SIZE,
"Can be used to restrict the total size used to cache a multi-transaction query.", "Can be used to restrict the total size used to cache a multi-transaction query.",
&max_binlog_cache_size, &max_binlog_cache_size, 0, &max_binlog_cache_size, &max_binlog_cache_size, 0,
......
...@@ -366,6 +366,8 @@ static sys_var_const sys_lower_case_table_names(&vars, ...@@ -366,6 +366,8 @@ static sys_var_const sys_lower_case_table_names(&vars,
static sys_var_thd_ulong_session_readonly sys_max_allowed_packet(&vars, "max_allowed_packet", static sys_var_thd_ulong_session_readonly sys_max_allowed_packet(&vars, "max_allowed_packet",
&SV::max_allowed_packet, &SV::max_allowed_packet,
check_max_allowed_packet); check_max_allowed_packet);
static sys_var_long_ptr sys_slave_max_allowed_packet(&vars, "slave_max_allowed_packet",
&slave_max_allowed_packet);
static sys_var_ulonglong_ptr sys_max_binlog_cache_size(&vars, "max_binlog_cache_size", static sys_var_ulonglong_ptr sys_max_binlog_cache_size(&vars, "max_binlog_cache_size",
&max_binlog_cache_size); &max_binlog_cache_size);
static sys_var_long_ptr sys_max_binlog_size(&vars, "max_binlog_size", static sys_var_long_ptr sys_max_binlog_size(&vars, "max_binlog_size",
......
...@@ -3512,23 +3512,23 @@ ER_ABORTING_CONNECTION 08S01 ...@@ -3512,23 +3512,23 @@ ER_ABORTING_CONNECTION 08S01
swe "Avbrt lnken fr trd %ld till db '%-.192s', anvndare '%-.48s' (%-.64s)" swe "Avbrt lnken fr trd %ld till db '%-.192s', anvndare '%-.48s' (%-.64s)"
ukr " ' %ld : '%-.192s' : '%-.48s' (%-.64s)" ukr " ' %ld : '%-.192s' : '%-.48s' (%-.64s)"
ER_NET_PACKET_TOO_LARGE 08S01 ER_NET_PACKET_TOO_LARGE 08S01
cze "Zji-Btn pchoz packet del ne 'max_allowed_packet'" cze "Zji-Btn pchoz packet del ne 'slave_max_allowed_packet'"
dan "Modtog en datapakke som var strre end 'max_allowed_packet'" dan "Modtog en datapakke som var strre end 'slave_max_allowed_packet'"
nla "Groter pakket ontvangen dan 'max_allowed_packet'" nla "Groter pakket ontvangen dan 'slave_max_allowed_packet'"
eng "Got a packet bigger than 'max_allowed_packet' bytes" eng "Got a packet bigger than 'slave_max_allowed_packet' bytes"
est "Saabus suurem pakett kui lubatud 'max_allowed_packet' muutujaga" est "Saabus suurem pakett kui lubatud 'slave_max_allowed_packet' muutujaga"
fre "Paquet plus grand que 'max_allowed_packet' reu" fre "Paquet plus grand que 'slave_max_allowed_packet' reu"
ger "Empfangenes Paket ist grer als 'max_allowed_packet' Bytes" ger "Empfangenes Paket ist grer als 'slave_max_allowed_packet' Bytes"
hun "A kapott csomag nagyobb, mint a maximalisan engedelyezett: 'max_allowed_packet'" hun "A kapott csomag nagyobb, mint a maximalisan engedelyezett: 'slave_max_allowed_packet'"
ita "Ricevuto un pacchetto piu` grande di 'max_allowed_packet'" ita "Ricevuto un pacchetto piu` grande di 'slave_max_allowed_packet'"
kor "'max_allowed_packet' ū Ŷ ޾ҽϴ." kor "'slave_max_allowed_packet' ū Ŷ ޾ҽϴ."
por "Obteve um pacote maior do que a taxa mxima de pacotes definida (max_allowed_packet)" por "Obteve um pacote maior do que a taxa mxima de pacotes definida (slave_max_allowed_packet)"
rum "Un packet mai mare decit 'max_allowed_packet' a fost primit" rum "Un packet mai mare decit 'slave_max_allowed_packet' a fost primit"
rus " , 'max_allowed_packet'" rus " , 'slave_max_allowed_packet'"
serbian "Primio sam mreni paket vei od definisane vrednosti 'max_allowed_packet'" serbian "Primio sam mreni paket vei od definisane vrednosti 'slave_max_allowed_packet'"
spa "Obtenido un paquete mayor que 'max_allowed_packet'" spa "Obtenido un paquete mayor que 'slave_max_allowed_packet'"
swe "Kommunkationspaketet r strre n 'max_allowed_packet'" swe "Kommunkationspaketet r strre n 'slave_max_allowed_packet'"
ukr " ¦ Φ max_allowed_packet" ukr " ¦ Φ slave_max_allowed_packet"
ER_NET_READ_ERROR_FROM_PIPE 08S01 ER_NET_READ_ERROR_FROM_PIPE 08S01
cze "Zji-Btna chyba pi ten z roury spojen" cze "Zji-Btna chyba pi ten z roury spojen"
dan "Fik lsefejl fra forbindelse (connection pipe)" dan "Fik lsefejl fra forbindelse (connection pipe)"
......
...@@ -1884,8 +1884,8 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type) ...@@ -1884,8 +1884,8 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
slave threads, since a replication event can become this much larger slave threads, since a replication event can become this much larger
than the corresponding packet (query) sent from client to master. than the corresponding packet (query) sent from client to master.
*/ */
thd->variables.max_allowed_packet= global_system_variables.max_allowed_packet thd->variables.max_allowed_packet= slave_max_allowed_packet;
+ MAX_LOG_EVENT_HEADER; /* note, incr over the global not session var */ thd->net.max_packet_size= slave_max_allowed_packet;
thd->slave_thread = 1; thd->slave_thread = 1;
thd->enable_slow_log= opt_log_slow_slave_statements; thd->enable_slow_log= opt_log_slow_slave_statements;
set_slave_thread_options(thd); set_slave_thread_options(thd);
...@@ -2630,6 +2630,7 @@ pthread_handler_t handle_slave_io(void *arg) ...@@ -2630,6 +2630,7 @@ pthread_handler_t handle_slave_io(void *arg)
thread, since a replication event can become this much larger than thread, since a replication event can become this much larger than
the corresponding packet (query) sent from client to master. the corresponding packet (query) sent from client to master.
*/ */
thd->net.max_packet_size= slave_max_allowed_packet;
mysql->net.max_packet_size= thd->net.max_packet_size+= MAX_LOG_EVENT_HEADER; mysql->net.max_packet_size= thd->net.max_packet_size+= MAX_LOG_EVENT_HEADER;
} }
else else
...@@ -2761,10 +2762,10 @@ reading event")) ...@@ -2761,10 +2762,10 @@ reading event"))
switch (mysql_error_number) { switch (mysql_error_number) {
case CR_NET_PACKET_TOO_LARGE: case CR_NET_PACKET_TOO_LARGE:
sql_print_error("\ sql_print_error("\
Log entry on master is longer than max_allowed_packet (%ld) on \ Log entry on master is longer than slave_max_allowed_packet (%lu) on \
slave. If the entry is correct, restart the server with a higher value of \ slave. If the entry is correct, restart the server with a higher value of \
max_allowed_packet", slave_max_allowed_packet",
thd->variables.max_allowed_packet); slave_max_allowed_packet);
mi->report(ERROR_LEVEL, ER_NET_PACKET_TOO_LARGE, mi->report(ERROR_LEVEL, ER_NET_PACKET_TOO_LARGE,
"%s", ER(ER_NET_PACKET_TOO_LARGE)); "%s", ER(ER_NET_PACKET_TOO_LARGE));
goto err; goto err;
......
...@@ -469,7 +469,7 @@ impossible position"; ...@@ -469,7 +469,7 @@ impossible position";
this larger than the corresponding packet (query) sent this larger than the corresponding packet (query) sent
from client to master. from client to master.
*/ */
thd->variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER; thd->variables.max_allowed_packet= ULONG_MAX;
/* /*
We can set log_lock now, it does not move (it's a member of We can set log_lock now, it does not move (it's a member of
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment