Download | Plain Text | Line Numbers
diff -Naur sql/slave.cc sql/slave.cc
--- sql/slave.cc 2011-08-31 19:22:46.000000000 +0200
+++ sql/slave.cc 2011-10-22 18:18:02.000000000 +0200
@@ -2034,7 +2034,10 @@
slave threads, since a replication event can become this much larger
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= global_system_variables.max_allowed_packet
+ // + MAX_LOG_EVENT_HEADER; /* note, incr over the global not session var */
+ thd->variables.max_allowed_packet= max(global_system_variables.max_allowed_packet,
+ global_system_variables.replicate_max_allowed_packet)
+ MAX_LOG_EVENT_HEADER; /* note, incr over the global not session var */
thd->slave_thread = 1;
thd->enable_slow_log= opt_log_slow_slave_statements;
@@ -2785,7 +2788,10 @@
thread, since a replication event can become this much larger than
the corresponding packet (query) sent from client to master.
*/
- 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;
+ mysql->net.max_packet_size = max(thd->net.max_packet_size,
+ global_system_variables.replicate_max_allowed_packet)
+ + MAX_LOG_EVENT_HEADER;
}
else
{
diff -Naur sql/sql_class.h sql/sql_class.h
--- sql/sql_class.h 2011-08-31 19:22:46.000000000 +0200
+++ sql/sql_class.h 2011-10-22 18:08:09.000000000 +0200
@@ -460,6 +460,7 @@
ulong join_buff_size;
ulong lock_wait_timeout;
ulong max_allowed_packet;
+ ulong replicate_max_allowed_packet;
ulong max_error_count;
ulong max_length_for_sort_data;
ulong max_sort_length;
diff -Naur sql/sql_repl.cc sql/sql_repl.cc
--- sql/sql_repl.cc 2011-07-13 21:09:03.000000000 +0200
+++ sql/sql_repl.cc 2011-10-22 18:19:37.000000000 +0200
@@ -587,7 +587,10 @@
this larger than the corresponding packet (query) sent
from client to master.
*/
- thd->variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER;
+ //thd->variables.max_allowed_packet+= MAX_LOG_EVENT_HEADER;
+ thd->variables.max_allowed_packet = max(thd->variables.max_allowed_packet,
+ thd->variables.replicate_max_allowed_packet)
+ + MAX_LOG_EVENT_HEADER;
/*
We can set log_lock now, it does not move (it's a member of
@@ -1787,7 +1790,10 @@
/*
to account binlog event header size
*/
- thd->variables.max_allowed_packet += MAX_LOG_EVENT_HEADER;
+ //thd->variables.max_allowed_packet += MAX_LOG_EVENT_HEADER;
+ thd->variables.max_allowed_packet = max(thd->variables.max_allowed_packet,
+ thd->variables.replicate_max_allowed_packet)
+ + MAX_LOG_EVENT_HEADER;
mysql_mutex_lock(log_lock);
diff -Naur sql/sys_vars.cc sql/sys_vars.cc
--- sql/sys_vars.cc 2011-08-31 19:22:46.000000000 +0200
+++ sql/sys_vars.cc 2011-10-22 18:05:27.000000000 +0200
@@ -1058,6 +1058,31 @@
BLOCK_SIZE(1024), NO_MUTEX_GUARD, NOT_IN_BINLOG,
ON_CHECK(check_max_allowed_packet));
+static bool
+check_replicate_max_allowed_packet(sys_var *self, THD *thd, set_var *var)
+{
+ longlong val;
+ if (session_readonly(self, thd, var))
+ return true;
+
+ val= var->save_result.ulonglong_value;
+ if (val < (longlong) global_system_variables.max_allowed_packet)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ WARN_OPTION_BELOW_LIMIT, ER(WARN_OPTION_BELOW_LIMIT),
+ "replicate_max_allowed_packet", "max_allowed_packet");
+ }
+ return false;
+}
+
+static Sys_var_ulong Sys_replicate_max_allowed_packet(
+ "replicate_max_allowed_packet",
+ "Max packet length to send to or receive from the server for replication threads",
+ SESSION_VAR(replicate_max_allowed_packet), CMD_LINE(REQUIRED_ARG),
+ VALID_RANGE(1024, 1024*1024*1024), DEFAULT(1024*1024),
+ BLOCK_SIZE(1024), NO_MUTEX_GUARD, NOT_IN_BINLOG,
+ ON_CHECK(check_replicate_max_allowed_packet));
+
static Sys_var_ulonglong Sys_max_binlog_cache_size(
"max_binlog_cache_size",
"Sets the total size of the transactional cache",