暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

17.4.1.35 Replication and Variables

原创 由迪 2020-04-20
618

使用STATEMENT模式时,系统变量不能正确复制 ,但以下变量与会话范围一起使用时除外:

auto_increment_increment

auto_increment_offset

character_set_client

character_set_connection

character_set_database

character_set_server

collation_connection

collation_database

collation_server

foreign_key_checks

identity

last_insert_id

lc_time_names

pseudo_thread_id

sql_auto_is_null

time_zone

timestamp

unique_checks

使用MIXEDmode时,上一列表中的变量与会话作用域一起使用时,会导致从基于语句的日志记录切换到基于行的日志记录。请参见 第5.4.4.3节“混合二进制日志记录格式”。

sql_mode除了NO_DIR_IN_CREATE模式外,也被复制 ;从属设备始终为保留自己的值 NO_DIR_IN_CREATE,而不管主控设备上的更改如何。所有复制格式都是如此。

但是,当mysqlbinlog解析一条 语句时,包括在内的完整 值 将传递到接收服务器。因此,在使用模式时,复制这样的语句可能并不安全。 SET @@sql_mode = modemodeNO_DIR_IN_CREATESTATEMENT

的default_storage_engine和 storage_engine系统变量不会被复制,而不考虑记录模式的; 这旨在促进不同存储引擎之间的复制。

该read_only系统变量是不可复制的。另外,启用此变量对临时表,表锁定和SET PASSWORD 不同MySQL版本中的语句有不同的影响。

该max_heap_table_size系统变量是不可复制的。尝试在主服务器上执行表上的语句时,如果在主服务器上执行此语句的值大于在从属服务器上的对应表的语句, 则在从属服务器上增加此变量的值而不在从属服务器上执行此操作的值最终会导致表错误。 。有关更多信息,请参见 第17.4.1.20节“复制和内存表”。 INSERTMEMORY

在基于语句的复制中,会话变量在更新表的语句中使用时无法正确复制。例如,以下语句序列将不会在主服务器和从服务器上插入相同的数据:

SET max_join_size=1000;
INSERT INTO mytable VALUES(@@max_join_size);
这不适用于通用序列:

SET time_zone=…;
INSERT INTO mytable VALUES(CONVERT_TZ(…, …, @@time_zone));
使用基于行的复制时,会话变量的复制不是问题,在这种情况下,会话变量始终被安全地复制。请参见 第17.1.2节“复制格式”。

在MySQL 5.6中,以下会话变量将被写入二进制日志,并在解析二进制日志时由复制从属服务器遵循,而与日志记录格式无关:

sql_mode

foreign_key_checks

unique_checks

character_set_client

collation_connection

collation_database

collation_server

sql_auto_is_null

重要
即使与字符集和归类有关的会话变量已写入二进制日志,也不支持不同字符集之间的复制。

为了帮助减少可能的混乱,我们建议始终lower_case_table_names在主服务器和从服务器上对系统变量使用相同的设置 ,尤其是在具有区分大小写的文件系统的平台上运行MySQL时。

注意
在以前的MySQL版本中,当使用区分大小写的文件系统时,在从属服务器上将此变量设置为1,在主服务器上将此变量设置为其他值可能会导致复制失败。此问题已在MySQL 5.6.1中修复。(缺陷#37656)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论