Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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”

以下会话变量将被写入到二进制日志中,并且在解析二进制日志时被副本服务器所承认:

Important

即使会话变量相关的字符集和排序规则写入到二进制日志中,但是不同字符集之间的复制不受支持。

为了减少可能的混淆,我们建议您总是使用相同的设置值在源服务器和副本服务器上,特别是在运行 MySQL 在案例敏感文件系统的平台上。lower_case_table_names 系统变量只能在初始化服务器时配置。