JeeStudy 发表于 2020-4-21 23:14:43

MySQL8.0大师之路:第11章:MySQL服务器管理-11.15 MySQL 混合二进制记录格式

混合二进制记录格式
当以MIXED日志记录格式运行时,服务器在以下情况下会自动从基于语句的记录切换为基于行的记录:
•当函数包含UUID()时。
•更新具有AUTO_INCREMENT列的一个或多个表并调用触发器或存储的函数时。与所有其他不安全的语句一样,如果binlog_format = STATEMENT,则会生成警告。
•当视图主体需要基于行的复制时,创建视图的语句也将使用它。例如,当创建视图的语句使用UUID()函数时,就会发生这种情况。
•当涉及到UDF的呼叫时。
•使用FOUND_ROWS()或ROW_COUNT()时。
•使用USER(),CURRENT_USER()或CURRENT_USER时。
•当涉及的表之一是mysql数据库中的日志表时。
•使用LOAD_FILE()函数时。
•当一条语句引用一个或多个系统变量时。
异常:以下系统变量(仅与会话范围一起使用)不会导致切换日志记录格式:

• 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



在早期版本中,当使用混合二进制日志记录格式时,如果按行记录一条语句,并且执行该语句的会话具有任何临时表,则所有后续语句均被视为不安全,并以基于行的格式记录,直到所有临时表该会话正在使用中的已删除。从MySQL 8.0开始,对临时表的操作不会以混合二进制日志格式记录,并且会话中临时表的存在不会影响每个语句所使用的日志模式。
除了上述决定外,各个引擎还可以确定更新表中信息时使用的日志记录格式。可以如下定义单个引擎的日志记录功能:
•如果引擎支持基于行的日志记录,则称该引擎具有行记录功能。
•如果引擎支持基于语句的日志记录,则称该引擎具有语句记录功能。
给定的存储引擎可以支持一种或两种日志格式。下表列出了每个引擎支持的格式。



Storage Engine Row Logging Supported Statement Logging Supported
ARCHIVE Yes Yes
BLACKHOLE Yes Yes
CSV Yes Yes
EXAMPLE Yes No
FEDERATED Yes Yes
HEAP Yes Yes
InnoDB Yes Yes when the transaction isolation level is REPEATABLE READ or SERIALIZABLE; No otherwise.
MyISAM Yes Yes
MERGE Yes Yes
NDB Yes No























页: [1]
查看完整版本: MySQL8.0大师之路:第11章:MySQL服务器管理-11.15 MySQL 混合二进制记录格式