19.5.1.39 复制和变量
系统变量在使用STATEMENT
模式时不正确地复制,except for以下变量在session范围内使用:
在使用MIXED
模式时,前面的列表中的变量,在session范围内使用,会导致从语句基于的到行基于的日志记录。见第7.4.4.3节,“Mixed Binary Logging Format”。
sql_mode
也会被复制,except forNO_DIR_IN_CREATE
模式;复制服务器总是保留自己的NO_DIR_IN_CREATE
值,不管源服务器上的变化。这对于所有复制格式都是true的。
然而,当mysqlbinlog解析SET @@sql_mode = mode
语句时,完整的mode
值,包括NO_DIR_IN_CREATE
,将被传递给接收服务器。因此,在STATEMENT
模式下,复制该语句可能不安全。
系统变量default_storage_engine
不被复制,不管是哪种日志模式,这是为了 facilitation replication between different storage engines.
系统变量read_only
不被复制。此外,在启用该变量时,对临时表、表锁定和SET PASSWORD
语句的影响在不同的MySQL版本中不同。
系统变量max_heap_table_size
不被复制。将在源服务器上增加该变量的值,而不在副本服务器上可能最终导致在副本服务器上执行INSERT
语句时出现Table is full错误,这是因为在源服务器上允许的表大小超过副本服务器上的表大小。更多信息,请见Section 19.5.1.21, “Replication and MEMORY Tables”。
在语句级别的复制中,会话变量不正确地在更新表时被复制。例如,以下语句序列在源服务器和副本服务器上不插入相同的数据:
SET max_join_size=1000;
INSERT INTO mytable VALUES(@@max_join_size);
这不适用于常见的序列:
SET time_zone=...;
INSERT INTO mytable VALUES(CONVERT_TZ(..., ..., @@time_zone));
在行级别的复制中,会话变量总是安全地被复制。见Section 19.2.1, “Replication Formats”。
以下会话变量将被写入到二进制日志中,并且在解析二进制日志时被副本服务器所承认:
即使会话变量相关的字符集和排序规则写入到二进制日志中,但是不同字符集之间的复制不受支持。
为了减少可能的混淆,我们建议您总是使用相同的设置值在源服务器和副本服务器上,特别是在运行 MySQL 在案例敏感文件系统的平台上。lower_case_table_names
系统变量只能在初始化服务器时配置。