使用时,系统变量没有正确复制声明
模式,除了以下变量在会话作用域下使用:
当混合
当使用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
设置只能在初始化服务器时配置。