4.1.39复制和变量

使用时,系统变量没有正确复制声明模式,除了以下变量在会话作用域下使用:

混合当使用Mode时,前面列表中的变量在会话范围中使用时,会导致从基于语句的日志记录切换到基于行的日志记录。看到混合二进制测井格式

sql_mode也是复制的,除了NO_DIR_IN_CREATE模式;副本总是保存自己的值NO_DIR_IN_CREATE,不管在源上对它做了什么更改。这适用于所有复制格式。

然而,当mysqlbinlog解析一个SET @@sql_mode =模式声明,完整的模式值,包括NO_DIR_IN_CREATE,被传递给接收服务器。由于这个原因,复制这样的语句可能不安全声明模式正在使用。

default_storage_engine不管日志记录模式如何,系统变量都不会被复制;这是为了方便不同存储引擎之间的复制。

read_only系统变量未复制。此外,启用此变量对临时表、表锁定和设置密码语句。

max_heap_table_size系统变量未复制。在源上增加此变量的值,而不对副本执行此操作,最终会导致桌子满了试图执行时副本上的错误插入一项声明内存源上的一个表,该表因此被允许比副本上的对应表增长得更大。有关更多信息,请参见4.1.21“复制和内存表”

在基于语句的复制中,会话变量在更新表的语句中使用时不能正确复制。例如,下面的语句序列不会在源和副本上插入相同的数据:

设置max_join_size = 1000;INSERT INTO mytable VALUES(@@max_join_size);

这并不适用于公共序列:

设置time_zone =…;INSERT INTO mytable VALUES(CONVERT_TZ(…,……@@time_zone));

在使用基于行的复制时,会话变量的复制不是问题,在这种情况下,会话变量总是安全复制的。看到第5.1节“复制格式”

以下会话变量被写入二进制日志,并在解析二进制日志时由副本执行,而不管日志格式如何:

重要的

尽管与字符集和排序规则相关的会话变量被写入二进制日志,但不支持不同字符集之间的复制。

为帮助减少可能的混淆,我们建议始终对lower_case_table_names系统变量,特别是当你在有区分大小写文件系统的平台上运行MySQL时。的lower_case_table_names设置只能在初始化服务器时配置。