您可以使用mysqld本节中描述的选项和系统变量影响二进制日志的操作以及控制哪些语句写入二进制日志。关于二进制日志的附加信息,请参阅二进制日志。关于使用MySQL服务器选项的附加信息和系统变量,明白了服务器命令选项,服务器系统变量。
下面的列表描述了启用和配置的启动选项的二进制日志。系统变量使用二进制日志本节稍后讨论。
——binlog-row-event-max-size =
N
命令行格式 ——binlog-row-event-max-size = #
系统变量(≥8.0.14) binlog_row_event_max_size
范围(≥8.0.14) 全球 动态(≥8.0.14) 没有 SET_VAR
提示应用(≥8.0.14)没有 类型 整数 默认值 8192年
最小值 256年
最大值(64位平台) 18446744073709551615
最大值(32位平台) 4294967295
当使用基于行的二进制日志记录时,该设置是一个软限制基于行的二进制日志事件的最大大小,以字节为单位。在可能的情况下,行存储在二进制日志分为事件有大小不超过该设置的值。如果一个事件不能被分割,可以超过最大大小。值必须是(或其它四舍五入)256的倍数。缺省值是8192个字节。
-
命令行格式 ——log-bin = file_name
类型 文件名称 指定基本名称用于二进制日志文件。启用二进制日志后,服务器日志语句改变数据的二进制日志,用于备份和复制。二进制日志是一个序列的文件基本名称和数字扩展。的
——log-bin
选项值的基本名称是日志序列。服务器创建二进制日志文件按顺序通过添加一个数字后缀基本名称。如果你不提供
——log-bin
选项,MySQL使用binlog
作为默认基础二进制日志文件的名称。与较早版本的兼容性,如果你提供——log-bin
选项没有字符串或一个空字符串,默认的基本名称
,使用主机的名称。host_name
本二进制日志文件的默认位置是数据目录。您可以使用
——log-bin
选项指定一个替代位置,通过添加一个领先的绝对路径名的基本名称指定一个不同的目录。当服务器读取从二进制日志条目索引文件,跟踪已使用的二进制日志文件,检查是否条目包含一个相对路径。如果是这样,相对路径的一部分被替换为绝对路径设置使用——log-bin
选择。绝对路径记录在二进制日志索引文件保持不变;在这种情况下,必须手动编辑索引文件,使一个新的路径或路径。二进制日志文件指定路径基本名称和任何可用的log_bin_basename
系统变量。在早期的MySQL版本,启用二进制日志默认情况下是禁用的,如果你指定了
——log-bin
选择。从MySQL 8.0、二进制日志在缺省情况下是启用的,你是否指定——log-bin
选择。唯一的例外是如果你使用mysqld初始化数据目录手动通过调用它——初始化
或——initialize-insecure
二进制日志记录选项,默认情况下是禁用的。有可能在这种情况下通过指定启用二进制日志记录——log-bin
选择。当启用二进制日志,log_bin
系统变量,它显示了二进制日志记录在服务器上的状态,设置为on。禁用二进制日志,你可以指定
——skip-log-bin
或——disable-log-bin
在启动时选项。如果这些选项,指定——log-bin
也是指定,指定的选项后优先。当二进制日志是禁用的log_bin
系统变量设置为关闭。当GTIDs在服务器上使用,如果禁用二进制日志后,重新启动服务器异常关闭,一些GTIDs可能会丢失,导致复制失败。正常关闭,设置GTIDs从当前的二进制日志文件保存在
mysql.gtid_executed
表。异常关闭后,这一切并没有发生,在复苏GTIDs被添加到表的二进制日志文件,如果仍然是启用二进制日志记录。如果二进制日志服务器重启是禁用的,服务器不能访问二进制日志文件恢复GTIDs,所以复制无法启动。二进制日志可以禁用安全正常后关闭。的
——log-slave-updates
和——slave-preserve-commit-order
选择需要二进制日志。如果您禁用二进制日志记录,忽略这些选项,或指定——log-slave-updates =了
和——skip-slave-preserve-commit-order
。MySQL时默认情况下禁用这些选项——skip-log-bin
或——disable-log-bin
都是确定的。如果您指定——log-slave-updates
或——slave-preserve-commit-order
在一起——skip-log-bin
或——disable-log-bin
、警告或错误消息。在MySQL 5.7中,一个服务器ID必须被指定时启用二进制日志记录,或服务器不会开始。在MySQL 8.0中,
server_id
系统变量默认设置为1。服务器现在可以开始使用这个默认服务器ID时启用二进制日志,但一个信息发布的消息,如果你不指定显式地通过设置一个服务器IDserver_id
系统变量。用于复制的服务器拓扑,您必须指定一个唯一的非零服务器为每个服务器ID。格式和管理信息的二进制日志,看看二进制日志。
-
命令行格式 ——log-bin-index = file_name
系统变量 log_bin_index
范围 全球 动态 没有 SET_VAR
提示应用没有 类型 文件名称 二进制日志索引文件的名称,包含二进制日志文件的名称。默认情况下,它有相同的位置和基本名称指定的值的二进制日志文件使用
——log-bin
选项,加上扩展.index
。如果你不指定——log-bin
,默认的二进制日志索引文件的名字binlog.index
。如果您指定——log-bin
选项没有字符串或一个空字符串,默认的二进制日志索引文件的名字
,使用主机的名称。host_name
-bin.index格式和管理信息的二进制日志,看看二进制日志。
声明中选择选项。下面的列表中的选项影响哪些语句写入二进制日志,复制源服务器发送的,因此它的副本。也有选择副本从源接收控制哪些语句应该执行或忽略。有关详细信息,请参见2.6.3部分,“副本服务器选项和变量”。
-
命令行格式 ——binlog-do-db =名字
类型 字符串 这个选项会影响二进制日志的方式类似的方式
——replicate-do-db
影响复制。这个选项的影响取决于statement-based或基于行的日志格式在使用,以同样的方式的影响
——replicate-do-db
取决于statement-based还是基于行的复制使用。你应该记住,用于记录给定的格式声明不一定是一样的,表示的值binlog_format
。例如,DDL语句等创建表
和ALTER TABLE
总是记录报表,不考虑日志格式效果,所以以下statement-based规则——binlog-do-db
适用在决定是否声明记录。Statement-based日志记录。只有那些语句写入二进制日志的默认数据库(也就是一个选择
使用
)是db_name
。指定多个数据库,使用这个选项多次,一次每个数据库;然而,这样做不导致跨数据库语句等更新
被记录,而另一个数据库(或数据库)被选中。some_db.some_table
设置foo = '酒吧'警告指定多个数据库必须使用这个选项的多个实例。因为数据库名称可以包含逗号,被视为单个数据库的名称,如果你提供一个逗号分隔的列表。
什么不工作的一个例子如您所料在使用statement-based日志:如果服务器启动
——binlog-do-db =销售
你发出以下语句更新
语句是不记录:使用价格;更新销售。1000年1月组数量=数量+;
的主要原因”检查默认的数据库”行为从表述单独很难知道是否应该被复制(例如,如果您正在使用多个表
删除
语句或多个表更新
语句,跨多个数据库)。也快来检查只有默认的数据库而不是所有数据库如果没有必要。另一种情况下可能不是不证自明的发生在一个给定的数据库复制,尽管它没有设置选项时指定。如果服务器已经启动
——binlog-do-db =销售
,下面的更新
尽管记录声明价格
不包括设置在什么时候——binlog-do-db
:使用销售;更新价格。折扣设置比例= + 10百分比;
基于行的日志记录。日志记录是局限于数据库
db_name
。只属于变更表db_name
记录;默认的数据库没有影响。假设服务器已启动——binlog-do-db =销售
和基于行的日志在起作用时,然后执行以下语句:使用价格;更新销售。2月集amount=amount+100;
的变化
2月
表中销售
按照记录的数据库了更新
声明;这是否发生使用
声明发布。然而,当使用基于行的日志格式和——binlog-do-db =销售
,由以下更改更新
不是记录:使用价格;更新价格。3月组数量= amount-25;
即使
使用的价格
声明被改变了使用销售
,更新
声明的影响仍将无法写入二进制日志。另一个重要的区别
——binlog-do-db
处理对statement-based日志而不是基于行的日志发生关于语句引用多个数据库。假设服务器已启动——binlog-do-db = db1
,执行下面的语句:使用db1;更新db1。表1,db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
如果您使用的是statement-based日志,更新两个表写入二进制日志。然而,当使用基于行的格式,只有改变
表1
记录;表二
是在一个不同的数据库,所以它是没有改变的更新
。现在假设,而不是使用db1
声明,使用db4
声明被使用:使用db4;更新db1。表1,db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
在这种情况下,
更新
声明不是当使用statement-based日志写入二进制日志。然而,当使用基于行的日志,改变表1
记录,但不是吗表二
换句话说,只有更改数据库中的表命名的——binlog-do-db
登录,选择默认的数据库对这种行为没有影响。 -
命令行格式 ——binlog-ignore-db =名字
类型 字符串 这个选项会影响二进制日志的方式类似的方式
——replicate-ignore-db
影响复制。这个选项的影响取决于statement-based或基于行的日志格式在使用,以同样的方式的影响
——replicate-ignore-db
取决于statement-based还是基于行的复制使用。你应该记住,用于记录给定的格式声明不一定是一样的,表示的值binlog_format
。例如,DDL语句等创建表
和ALTER TABLE
总是记录报表,不考虑日志格式效果,所以以下statement-based规则——binlog-ignore-db
适用在决定是否声明记录。Statement-based日志记录。告诉服务器没有日志声明默认的数据库(也就是一个选择
使用
)是db_name
。当没有默认数据库,不
——binlog-ignore-db
选择应用,这样的声明总是记录。(错误# 11829838,错误# 60188)基于行的格式。告诉服务器没有记录更新数据库中的表
db_name
。当前的数据库没有影响。使用statement-based日志时,下面的例子不工作与您预期的一样。假设服务器已启动
——binlog-ignore-db =销售
你发出以下语句:使用价格;更新销售。1000年1月组数量=数量+;
的
更新
声明是在这种情况下,因为记录——binlog-ignore-db
仅适用于默认数据库(决定的使用
声明)。因为销售
数据库指定明确的声明,该声明没有被过滤。然而,当使用基于行的日志,更新
声明的影响不写入二进制日志,这意味着没有改变sales.january
表记录;在这种情况下,——binlog-ignore-db =销售
原因所有更改在源表的副本销售
数据库被忽略的二进制日志。指定多个数据库忽略,多次使用这个选项,一旦为每个数据库。因为数据库名称可以包含逗号,被视为单个数据库的名称,如果你提供一个逗号分隔的列表。
你不应该使用这个选项如果使用跨数据库更新和你不希望这些更新记录。
校验和选项。MySQL支持读写二进制日志校验和。这些都是使使用这里列出的两个选项:
——binlog-checksum ={没有| CRC32}
命令行格式 ——binlog-checksum =类型
类型 字符串 默认值 CRC32
有效值 没有一个
CRC32
启用这个选项会导致源写事件写入二进制日志的校验和。设置为
没有一个
禁用或算法的名称用于生成校验和;目前,只有CRC32校验和支持,和CRC32是默认的。你不能改变这个选项的设置在一个事务中。
控制阅读的校验和副本(从继电器日志),使用——slave-sql-verify-checksum
选择。
测试和调试选项。下面的二进制日志选项用于复制测试和调试。他们不是用于正常操作。
下面的列表描述了系统变量控制二进制日志。他们可以设置在服务器启动时,其中的一些可以在运行时改变集
。服务器选项用于控制二进制日志早在这一节中列出。
-
命令行格式 ——binlog-cache-size = #
系统变量 binlog_cache_size
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 32768年
最小值 4096年
最大值(64位平台) 18446744073709547520
最大值(32位平台) 4294967295
块大小 4096年
内存缓冲区的大小在一个事务举行修改二进制日志。的值必须是4096的倍数。
当启用二进制日志服务器上(
log_bin
系统变量设置为上),二进制日志缓存分配给每个客户端如果服务器支持任何事务性存储引擎。如果事务的数据超过空间的内存缓冲区,多余的数据存储在一个临时文件。当二进制日志加密服务器上是活跃的,内存缓冲区不加密,但(从MySQL 8.0.17)任何临时文件用于保存二进制日志缓存是加密的。每次提交事务后,二进制日志缓存是重置通过清除内存缓冲区,如果使用删除临时文件。如果你经常使用大型交易,你可以增加这个缓存大小来获得更好的性能,减少或消除需要写入临时文件。的
Binlog_cache_use
和Binlog_cache_disk_use
状态变量可以用于调优这个变量的大小。看到二进制日志。binlog_cache_size
集的大小事务缓存;语句缓存的大小是由binlog_stmt_cache_size
系统变量。 -
命令行格式 ——binlog-checksum =名字
系统变量 binlog_checksum
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 字符串 默认值 CRC32
有效值 没有一个
CRC32
启用时,这个变量会导致源为每个事件编写一个校验和的二进制日志。
binlog_checksum
支持的值没有一个
(禁用校验和)CRC32
。默认值是CRC32
。当binlog_checksum
是禁用的(值没有一个
),服务器验证,只有完成事件写入二进制日志通过编写和检查事件的长度为每个事件(而不是一个校验和)。设置这个变量在源的价值识别导致副本设置自己的复制品
binlog_checksum
价值没有一个
和停止复制一个错误。如果向后兼容旧副本是一个问题,你可能想要显式地设置值没有一个
。包括MySQL 8.0.20、组复制不能利用校验和和不支持他们的存在在二进制日志,所以你必须设置
binlog_checksum =没有
当配置一个服务器实例成为团体会员。从MySQL 8.0.21,组复制支持校验和,所以小组成员可以使用默认设置。改变的价值
binlog_checksum
会导致旋转的二进制日志,因为校验和必须为整个二进制日志文件写的,和永远不会只有一个的一部分。你不能改变的价值binlog_checksum
在一个事务中。启用二进制日志事务压缩时使用
binlog_transaction_compression
系统变量,校验和的写作目的不是个别事件在一个压缩事务负载。而不是一个校验和是GTID写事件,和一个校验和压缩Transaction_payload_event
。 binlog_direct_non_transactional_updates
命令行格式 ——binlog-direct-non-transactional-updates[={|在}]
系统变量 binlog_direct_non_transactional_updates
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
由于并发问题,副本可以变得不一致当事务包含更新事务和nontransactional表。MySQL试图保存这些语句之间的因果关系通过编写nontransactional语句事务缓存,刷新后提交。然而,问题出现当修改完成nontransactional表代表一个事务立即可见其他连接,因为这些变化可能不会立即到二进制日志写的。
的
binlog_direct_non_transactional_updates
变量为这一问题提供一种可能的解决方案。默认情况下,这个变量是禁用的。启用binlog_direct_non_transactional_updates
导致更新nontransactional表直接写入二进制日志,而不是事务缓存。MySQL 8.0.14,设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
binlog_direct_non_transactional_updates
只适合语句使用statement-based二进制日志格式复制;也就是说,它的价值只有当工作binlog_format
是声明
,或者当binlog_format
是混合
和一个给定的语句被复制使用statement-based格式。这个变量在二进制日志格式没有影响行
,或者当binlog_format
被设置为混合
和一个给定的语句是使用基于行的格式复制。重要的在启用这个变量之前,您必须确保没有事务和nontransactional表之间的依赖关系;这种依赖的一个例子
从innodb_table插入myisam_table SELECT *
。否则,这样的声明可能导致偏离源复制品。这个变量在二进制日志格式没有影响
行
或混合
。-
命令行格式 ——binlog-encryption[={|在}]
介绍了 8.0.14 系统变量 binlog_encryption
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
支持加密二进制日志文件和继电器这个服务器上的日志文件。
从
是默认的。在
集加密的二进制日志文件和中继日志文件。启用二进制日志不需要在服务器上启用加密,所以你可以加密传递日志文件的副本上没有二进制日志。使用加密,必须安装和配置一个密匙环插件提供MySQL服务器的密匙环的服务。说明要做到这一点,请参阅MySQL密匙环。任何受支持的密匙环插件可用于存储二进制日志加密密钥。当您第一次启动服务器启用二进制日志加密后,一个新的二进制日志加密密钥生成的二进制日志和中继日志之前初始化。这个密钥用于加密文件的密码为每个二进制日志文件(如果服务器启用了二进制日志)和中继日志文件(如果服务器复制通道),并进一步产生的密钥文件密码是用于加密文件中的数据。中继日志文件加密的通道,包括组复制灌肠器通道和加密被激活后创建的新渠道。二进制日志索引文件和中继日志索引文件没有加密。
如果你激活加密服务器运行时,一个新的二进制日志生成加密密钥。唯一的例外是如果加密之前活跃在服务器上,然后禁用,在这种情况下使用的二进制日志加密密钥之前再次使用。二进制日志文件和中继日志文件立即旋转,为新文件和文件密码和所有后续二进制日志文件和继电器使用这个二进制日志加密密钥加密的日志文件。现有的二进制日志文件和中继服务器上的日志文件仍然存在不会自动加密,但是你可以净化他们,如果他们不再需要。
如果你禁用加密通过改变
binlog_encryption
系统变量从
二进制日志文件和中继日志文件立即旋转,所有后续日志是未加密的。以前不会自动解密加密的文件,但服务器仍然能够阅读它们。的BINLOG_ENCRYPTION_ADMIN
特权(或弃用超级
特权)需要激活或禁用加密服务器运行时。组复制灌肠器通道是不包括在中继日志轮换的要求,所以这些渠道未加密的日志不开始旋转,直到他们的日志在正常使用。二进制日志文件的更多信息和中继日志文件加密,明白了加密的二进制日志文件和中继日志文件。
-
命令行格式 ——binlog-error-action(=价值)
系统变量 binlog_error_action
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 枚举 默认值 ABORT_SERVER
有效值 IGNORE_ERROR
ABORT_SERVER
控制会发生什么当服务器遇到错误,如无法写入,冲洗或同步二进制日志,可以导致源代码的二进制日志变得不一致和副本失去同步。
这个变量默认为
ABORT_SERVER
,这使得服务器停止伐木和关闭每当遇到这样的一个错误二进制日志。重启,恢复收益在一个意想不到的情况下服务器停止(见3.2节,“副本处理意外停止”)。当
binlog_error_action
被设置为IGNORE_ERROR
,如果服务器遇到这种错误继续正在进行的事务,记录错误然后停止日志记录,并继续执行更新。恢复二进制日志log_bin
必须启用,这需要重启服务器。这个设置提供向后兼容旧版本的MySQL。 -
命令行格式 ——binlog-expire-logs-seconds = #
系统变量 binlog_expire_logs_seconds
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 2592000
最小值 0
最大值 4294967295
集的二进制日志保质期在几秒钟内。他们的保质期结束后,二进制日志文件可以自动删除。删除可能发生在启动时,当二进制日志刷新。法拉盛是表示登录MySQL服务器日志。
默认的二进制日志保质期是2592000秒,等于30天(30 * 24 * 60 * 60秒)。如果没有默认的应用
binlog_expire_logs_seconds
还是弃用系统变量expire_logs_days
有一个值设置在启动。如果一个非零值的变量binlog_expire_logs_seconds
或expire_logs_days
设置在启动时,这个值作为二进制日志保质期。如果一个非零值为这两个变量设置在启动时,的值binlog_expire_logs_seconds
作为二进制日志保质期和的值expire_logs_days
忽略警告消息。禁用自动清除的二进制日志,显式地指定的值为0
binlog_expire_logs_seconds
,不指定一个值expire_logs_days
。与较早版本的兼容性,自动清除也禁用如果您显式地指定的值为0expire_logs_days
,不指定一个值binlog_expire_logs_seconds
。在这种情况下,默认的binlog_expire_logs_seconds
不适用。 -
命令行格式 ——binlog-format =格式
系统变量 binlog_format
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 枚举 默认值 行
有效值 行
声明
混合
这个系统变量设置二进制日志格式,可以是任意的
声明
,行
,或混合
。看到5.1节,“复制格式”。设置生效在服务器上启用二进制日志时,这种情况时log_bin
系统变量设置为在
。从MySQL 8.0、二进制日志是默认启用。binlog_format
可以设置在启动或运行时,除了在一些情况下,在运行时改变这个变量是不可能的或导致复制失败,如后所述。默认值是
行
。异常:在NDB集群中,默认混合
;statement-based复制不支持NDB集群。设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
这个变量变化时的规则生效和效果能持续多久是相同的其他MySQL服务器系统变量。有关更多信息,请参见为变量赋值语法。
当
混合
指定,statement-based复制使用,除了情况只保证基于行的复制导致的结果。例如,这个当语句包含用户定义函数(UDF)或UUID ()
函数。详情如何存储程序(存储过程和函数、触发器和事件)处理每个二进制日志格式设置时,看到的存储程序的二进制日志。
也有例外,当你无法在运行时切换复制格式:
从内部复制格式不能改变一个存储函数或一个触发器。
如果一个会话打开临时表,会话复制格式不能改变(
设置@@SESSION.binlog_format
)。如果任何复制通道已经打开临时表,复制格式不能改变全球(
设置@@GLOBAL.binlog_format
或设置@@PERSIST.binlog_format
)。如果任何复制通道填充器线程正在运行,复制格式不能改变全球(
设置@@GLOBAL.binlog_format
或设置@@PERSIST.binlog_format
)。
试图把复制格式在任何一种情况下(或试图设置当前复制格式)会导致错误。但是,您可以使用
PERSIST_ONLY
(设置@@PERSIST_ONLY.binlog_format
)在任何时候改变复制格式,因为这个动作不修改全球体系运行时变量值,和服务器重启后生效。复制格式在运行时切换时不推荐任何临时表存在,因为临时表记录只有当使用statement-based复制,而基于行的复制和混合复制,他们没有记录。
更改的日志格式复制源服务器不会导致改变其复制品日志格式匹配。转换正在复制格式,复制会导致问题如果一个复制品启用二进制日志,和改变导致复制使用
声明
格式日志源时使用行
或混合
格式的日志记录。副本不能转换成二进制日志条目了行
日志格式声明
为使用的二进制日志格式,所以这种情况可以导致复制失败。有关更多信息,请参见设置二进制日志格式。二进制日志格式影响以下服务器选项的行为:
这些影响进行了详细的描述个人的选择。
binlog_group_commit_sync_delay
命令行格式 ——binlog-group-commit-sync-delay = #
系统变量 binlog_group_commit_sync_delay
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 0
最小值 0
最大值 1000000
控制多少微秒的二进制日志提交之前等待同步二进制日志文件到磁盘。默认情况下
binlog_group_commit_sync_delay
设置为0,这意味着没有延迟。设置binlog_group_commit_sync_delay
一微秒的延迟使更多交易一起同步到磁盘,减少整体时间提交的事务,因为大组每组需要更少的时间单位。当
sync_binlog = 0
或sync_binlog = 1
设置,指定的延迟binlog_group_commit_sync_delay
适用于每一个二进制日志同步之前提交集团(或的情况吗sync_binlog = 0
在继续之前)。当sync_binlog
将一个值n大于1,延迟后每一个应用n二进制日志提交组。设置
binlog_group_commit_sync_delay
可以增加并行事务提交的数量在任何服务器故障转移后(或可能)的是一件复制品,因此可以提高并行执行的副本。受益于这种效果,副本服务器必须有slave_parallel_type = LOGICAL_CLOCK
集,,效果更加显著binlog_transaction_dependency_tracking = COMMIT_ORDER
也是集。重要的是要考虑源的吞吐量和副本的吞吐量时调整设置binlog_group_commit_sync_delay
。设置
binlog_group_commit_sync_delay
也能减少fsync ()
任何服务器上调用二进制日志(源或副本),有一个二进制日志。注意,设置
binlog_group_commit_sync_delay
在服务器上增加了交易的延迟,这可能会影响到客户端应用程序。在高并发工作负载,有可能延迟增加竞争,因此降低吞吐量。通常,设置一个延迟的优点大于缺点,但调优应该进行确定最佳设置。binlog_group_commit_sync_no_delay_count
命令行格式 ——binlog-group-commit-sync-no-delay-count = #
系统变量 binlog_group_commit_sync_no_delay_count
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 0
最小值 0
最大值 100000年
交易的最大数量等之前中止当前指定的延迟
binlog_group_commit_sync_delay
。如果binlog_group_commit_sync_delay
设置为0,那么这个选项没有影响。-
命令行格式 ——binlog-max-flush-queue-time = #
弃用 是的 系统变量 binlog_max_flush_queue_time
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 0
最小值 0
最大值 100000年
binlog_max_flush_queue_time
弃用,最终被标记为删除在以后的MySQL版本。以前,这个系统变量控制的时间以微秒为单位继续阅读交易冲洗队列之前与组提交。它不再有任何影响。 -
命令行格式 ——binlog-order-commits[={|在}]
系统变量 binlog_order_commits
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 在
当这个变量是一个复制源服务器上启用(默认),事务提交指令发给存储引擎在一个线程,串行化,以便事务总是在相同的顺序写入二进制日志。禁用这个变量允许事务提交指令发给使用多个线程。与二进制日志组提交,这样可以防止单个事务的提交率吞吐量的瓶颈,因此可能产生性能改进。
事务写入二进制日志的时候,所有的存储引擎已经证实涉及事务准备提交。二进制日志组提交逻辑然后提交一组二进制日志写入后的事务。当
binlog_order_commits
被禁用,因为多个线程用于这一过程,交易提交集团可能在不同的订单从他们的订单在二进制日志。(交易从一个客户端总是按时间顺序提交。)在许多情况下,这并不重要,因为业务进行单独的事务应该产生一致的结果,如果不是这种情况,应该使用一个事务。如果你想确保事务的历史来源和多线程的副本仍然是相同的,集
slave_preserve_commit_order = 1
在副本。 binlog_rotate_encryption_master_key_at_startup
命令行格式 ——binlog-rotate-encryption-master-key-at-startup[={|在}]
介绍了 8.0.14 系统变量 binlog_rotate_encryption_master_key_at_startup
范围 全球 动态 没有 SET_VAR
提示应用没有 类型 布尔 默认值 从
指定二进制日志万能钥匙是否在服务器启动旋转。二进制日志主密钥用于加密的二进制日志加密密钥文件密码的二进制日志文件和中继服务器上的日志文件。在服务器启动时启用二进制日志加密后(第一次
binlog_encryption =对
),一个新的二进制日志生成加密密钥和作为二进制日志主密钥。如果binlog_rotate_encryption_master_key_at_startup
也将系统变量在
,只要重新启动服务器,进一步二进制日志生成加密密钥和作为二进制日志主键用于所有后续二进制日志文件和中继日志文件。如果binlog_rotate_encryption_master_key_at_startup
系统变量设置为从
是默认的,现有的二进制日志主密钥服务器重启后再次使用。更多信息在二进制日志加密密钥和二进制日志主键,看到的加密的二进制日志文件和中继日志文件。-
命令行格式 ——binlog-row-event-max-size = #
系统变量(≥8.0.14) binlog_row_event_max_size
范围(≥8.0.14) 全球 动态(≥8.0.14) 没有 SET_VAR
提示应用(≥8.0.14)没有 类型 整数 默认值 8192年
最小值 256年
最大值(64位平台) 18446744073709551615
最大值(32位平台) 4294967295
当使用基于行的二进制日志记录时,该设置是一个软限制基于行的二进制日志事件的最大大小,以字节为单位。在可能的情况下,行存储在二进制日志分为事件有大小不超过该设置的值。如果一个事件不能被分割,可以超过最大大小。值必须是(或其它四舍五入)256的倍数。缺省值是8192个字节。
这个全球系统变量是只读的,只在服务器启动时可以设置。它的价值因此只能通过修改
PERSIST_ONLY
关键字或@@persist_only
限定符的集
声明。 -
命令行格式 ——binlog-row-image = image_type
系统变量 binlog_row_image
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 枚举 默认值 完整的
有效值 完整的
(记录所有列)最小的
(日志只改变列和列需要识别行)noblob
(记录所有列,除了不必要的BLOB和文本列)MySQL基于行的复制,这个变量决定行图像写入二进制日志。
设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
在MySQL中基于行的复制,更改事件包含两个图像,每一行一个”之前”图像的列匹配搜索行被更新时,和一个”后”图像包含的变化。通常,MySQL日志满行(即所有列)之前和之后的照片。然而,它并不是一定需要包括每一列在这两个图片,我们通常可以节省磁盘,内存和网络使用的日志只有那些列实际上是必需的。
请注意当删除一行,只是之前的图像记录,因为没有改变价值观传播后删除。当插入一行时,只有图像记录后,由于没有现有的行相匹配。只有当更新一行都是所需的之前和之后的图像,并写入二进制日志。
图像之前,它是必要的,唯一地标识所需的最低组列行记录。如果表包含一行有一个主键,那么只有主键列或列是写入二进制日志。否则,如果桌子上有一个唯一键的所有列
非空
,那么只有唯一键的列需要被记录。(如果表有一个主键和惟一键没有任何零
列,然后所有列之前必须使用的图像,并记录)。后的形象,有必要日志只列已经改变了。你可以导致服务器日志已满或使用最小的行
binlog_row_image
系统变量。这个变量实际上需要三种可能的值,如下面所示:请注意这个变量不支持NDB集群;设置的日志没有影响
NDB
表。默认值是
完整的
。当使用
最小的
或noblob
、删除和更新是保证正常工作对于一个给定的表当且仅当下列条件都对源表和目标表:所有列必须出现在相同的顺序;每个列都必须使用相同的数据类型作为其对应表。
必须具有相同的主键的表定义。
(换句话说,表必须一致,可能除了索引不表的主键的一部分。)
如果这些条件不满足,有可能是目标表的主键列值可能不足以提供一个独特的比赛删除或更新。在这种情况下,没有发出警告或错误;源和复制品默默地发散,从而打破一致性。
设置这个变量当二进制日志格式没有影响
声明
。当binlog_format
是混合
的设置binlog_row_image
应用于使用基于行的格式记录的变化,但这个设置不会影响变化记录报表。设置
binlog_row_image
在全球或会话水平不会引起隐式提交;这意味着这个变量可以改变在交易过程中不影响交易。 -
命令行格式 ——binlog-row-metadata = metadata_type
系统变量 binlog_row_metadata
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 枚举 默认值 最小的
有效值 完整的
(包括所有元数据)最小的
(包括限制元数据)配置表的元数据添加到二进制日志当使用基于行的记录。当设置为
最小的
,默认的,只有相关的元数据签署
旗帜,列字符集和几何类型记录。当设置为完整的
完成元数据表记录,比如列名,枚举
或集
字符串值,主键
信息,等等。扩展元数据有以下目的:
副本使用元数据来传输数据时从源的表结构是不同的。
外部软件可以使用元数据解码行事件和将数据存储到外部数据库、数据仓库等。
-
命令行格式 ——binlog-row-value-options = #
系统变量 binlog_row_value_options
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 集 默认值 ”
有效值 PARTIAL_JSON
当设置为
PARTIAL_JSON
空间效率,这使得使用二进制日志格式更新,修改只有一小部分的一个JSON文档,导致基于行的复制只编写JSON文档的已修改的部分更新的后像二进制日志(而不是编写完整的文档)。这是一个更新
语句修改一个JSON列使用任何序列JSON_SET ()
,JSON_REPLACE ()
,JSON_REMOVE ()
。如果修改需要更多的空间比完整的文档,或者服务器无法生成部分更新,使用完整的文档。设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
PARTIAL_JSON
是唯一支持的价值;要设置binlog_row_value_options
,将它的值设置为空字符串。binlog_row_value_options = PARTIAL_JSON
只有当启用二进制日志和生效binlog_format
被设置为行
或混合
。Statement-based复制总是日志只有JSON文档的修改部分,不管任何值设置binlog_row_value_options
。最大化的空间保存,使用binlog_row_image = NOBLOB
或binlog_row_image =最小
这个选项。binlog_row_image =全
比这两种保存较少的空间,因为完整的JSON文档存储在before-image,和部分更新存储后像。mysqlbinlog输出包括部分JSON形式的更新事件作为base - 64编码的字符串
BINLOG
语句。如果——详细
指定选项,mysqlbinlog显示部分的JSON更新为可读的JSON使用pseudo-SQL语句。MySQL复制生成一个错误如果不能用于修改的JSON文档副本。这包括未能找到的路径。要知道,即使这和其他安全检查,如果一个JSON文档的副本有差异,在源和部分更新,理论上是可以产生一个有效的但意想不到的JSON文档的副本。
-
命令行格式 ——binlog-rows-query-log-events[={|在}]
系统变量 binlog_rows_query_log_events
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
这个系统变量影响基于行的记录。启用时,它会导致服务器写日志事件如行查询日志事件信息的二进制日志。此信息可以用于调试和相关用途,例如获得的原始查询发布源时不能从行更新重建。
设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
这些信息的事件通常忽视了MySQL程序读取二进制日志,所以导致没有问题当复制或从备份恢复。查看,增加使用mysqlbinlog的冗长的水平
——详细
两次选择,要么vv
或——冗长冗长的
。 -
命令行格式 ——binlog-stmt-cache-size = #
系统变量 binlog_stmt_cache_size
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 32768年
最小值 4096年
最大值(64位平台) 18446744073709547520
最大值(32位平台) 4294967295
块大小 4096年
内存缓冲区的大小为二进制日志来保存nontransactional声明发布在一个事务。的值必须是4096的倍数。
当启用二进制日志服务器上(
log_bin
系统变量设置为上),单独的二进制日志事务和语句缓存分配给每个客户端如果服务器支持任何事务性存储引擎。如果nontransactional语句中使用事务的数据超过空间的内存缓冲区,多余的数据存储在一个临时文件。当二进制日志加密服务器上是活跃的,内存缓冲区不加密,但(从MySQL 8.0.17)任何临时文件用于保存二进制日志缓存是加密的。每次提交事务后,二进制日志语句缓存重置通过清除内存缓冲区,如果使用删除临时文件。如果你经常使用大型nontransactional语句在事务,可以增加这个缓存大小来获得更好的性能,减少或消除需要写入临时文件。的
Binlog_stmt_cache_use
和Binlog_stmt_cache_disk_use
状态变量可以用于调优这个变量的大小。看到二进制日志。的
binlog_cache_size
系统变量集的大小事务缓存。 binlog_transaction_compression
命令行格式 ——binlog-transaction-compression[={|在}]
介绍了 8.0.20 系统变量 binlog_transaction_compression
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
使压缩为事务写入二进制日志文件在这个服务器。
从
是默认的。使用binlog_transaction_compression_level_zstd
系统变量设置水平zstd算法用于压缩。当启用二进制日志事务压缩时,事务有效载荷压缩,然后写入二进制日志文件为一个单一的事件(
Transaction_payload_event
)。压缩事务负载仍处于压缩状态时发送副本复制流,其他组复制组的成员,或客户等mysqlbinlog,并写入中继日志仍处于压缩状态。二进制日志事务压缩因此节省存储空间对交易的发起者和收件人(和他们的备份),节省网络带宽,服务器实例之间的交易被发送。为
binlog_transaction_compression =对
有直接影响,必须启用二进制日志记录在服务器上。当一个MySQL服务器实例没有二进制日志,如果从MySQL 8.0.20释放,它可以接收、处理和显示压缩事务有效载荷无论其价值binlog_transaction_compression
。压缩事务负载受到这样的服务器实例都写在他们的压缩状态的继电器日志,所以他们间接受益于压缩由其他服务器的复制拓扑。这个系统变量不能被改变了在一个事务的上下文中。设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
在二进制日志事务压缩的更多信息,包括事件的细节,不压缩,和行为的变化使用事务压缩时,看到的二进制日志事务压缩。
binlog_transaction_compression_level_zstd
命令行格式 ——binlog-transaction-compression-level-zstd = #
介绍了 8.0.20 系统变量 binlog_transaction_compression_level_zstd
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 3
最小值 1
最大值 22
组二进制日志事务压缩的压缩级别,该服务器上启用的
binlog_transaction_compression
系统变量。值是一个整数,决定了压缩工作,从1(最低工作)22(最高的努力)。如果不指定这个系统变量,压缩级别被设置为3。随着压缩程度的增加,数据压缩比的增加,这可以减少所需的存储空间和网络带宽事务负载。然而,数据压缩所需的努力也增加,花时间和原始服务器上的CPU和内存资源。提高压缩努力没有线性关系提高数据压缩比。
这个系统变量不能被改变了在一个事务的上下文中。设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
binlog_transaction_dependency_tracking
命令行格式 ——binlog-transaction-dependency-tracking =值
系统变量 binlog_transaction_dependency_tracking
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 枚举 默认值 COMMIT_ORDER
有效值 COMMIT_ORDER
WRITESET
WRITESET_SESSION
复制的源服务器多线程副本(副本
slave_parallel_workers
设置为大于0的值),binlog_transaction_dependency_tracking
指定依赖项的来源信息,源记录的二进制日志来帮助副本确定交易可以并行执行。可能的值是:COMMIT_ORDER
:依赖信息从源生成的提交时间戳。这是默认的。WRITESET
:依赖信息从源生成的写,和任何的事务写不同的元组可以并行。WRITESET_SESSION
:依赖信息从源生成的写,和任何的事务写不同的元组可以并行,除了没有两个更新相同的会话可以重新排序。
在
WRITESET
或WRITESET_SESSION
模式下,交易还可以提交订单,除非你设置slave_preserve_commit_order = 1
。对于一些事务,
WRITESET
和WRITESET_SESSION
模式不能改善的结果中返回COMMIT_ORDER
模式。这是空的理由事务或部分写集,事务更新表没有主键或唯一键,和事务更新父表的外键关系。在这些情况下,源使用COMMIT_ORDER
模式生成的依赖信息。设置
WRITESET
或WRITESET_SESSION
的价值binlog_transaction_dependency_tracking
,transaction_write_set_extraction
必须设置为指定的算法(不设置从
)。默认在MySQL 8.0transaction_write_set_extraction
被设置为XXHASH64
。您选择的价值transaction_write_set_extraction
又不能改变的价值binlog_transaction_dependency_tracking
仍然是WRITESET
或WRITESET_SESSION
。行散列的数量,并检查最新的事务已经改变了一个给定的行是由价值决定的
binlog_transaction_dependency_history_size
。组复制后进行自己的并行化认证从继电器日志应用事务时,设置独立的价值
binlog_transaction_dependency_tracking
。然而,的价值binlog_transaction_dependency_tracking
是否影响事务写入二进制日志复制集团成员。依赖那些日志中的信息是用来协助状态传输的过程从捐赠者的二进制日志用于分布式复苏,每当发生一个成员加入或前端与组。这一过程,设置binlog_transaction_dependency_tracking = WRITESET
小组成员可以提高性能,根据集团的工作负载。binlog_transaction_dependency_history_size
命令行格式 ——binlog-transaction-dependency-history-size = #
系统变量 binlog_transaction_dependency_history_size
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 25000年
最小值 1
最大值 1000000
设置一个上限行散列的数量,保存在内存和用于查找给定行最后修改的事务。一旦达成了这一数量的散列,历史是清除。
-
命令行格式 ——expire-logs-days = #
弃用 是的 系统变量 expire_logs_days
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 0
最小值 0
最大值 99年
指定的天数自动删除前二进制日志文件。
expire_logs_days
弃用,你应该期望它在将来的版本中被删除。相反,使用binlog_expire_logs_seconds
二进制日志,保质期在秒。如果你不设置一个系统变量值,默认有效期为30天。删除可能发生在启动时,当二进制日志刷新。法拉盛是表示登录MySQL服务器日志。你指定的任何非零值
expire_logs_days
是忽略了如果binlog_expire_logs_seconds
也是指定,的价值binlog_expire_logs_seconds
使用的二进制日志保质期。在这种情况下发出一条警告消息。一个非零值expire_logs_days
只适用于二进制日志保质期如果binlog_expire_logs_seconds
没有指定或被指定为0。禁用自动清除的二进制日志,显式地指定的值为0
binlog_expire_logs_seconds
,不指定一个值expire_logs_days
。与较早版本的兼容性,自动清除也禁用如果您显式地指定的值为0expire_logs_days
,不指定一个值binlog_expire_logs_seconds
。在这种情况下,默认的binlog_expire_logs_seconds
不适用。 -
在服务器上显示二进制日志的状态,要么启用(
在
)或禁用(从
)。启用二进制日志后,服务器日志语句改变数据的二进制日志,用于备份和复制。在
意味着二进制日志可用,从
意味着它是不使用的。的——log-bin
选项可以使用指定的基本名称和位置二进制日志。在早期的MySQL版本,启用二进制日志默认情况下是禁用的,如果你指定了
——log-bin
选择。从MySQL 8.0,默认启用二进制日志,log_bin
系统变量设置为在
你是否指定——log-bin
选择。唯一的例外是如果你使用mysqld初始化数据目录手动通过调用它——初始化
或——initialize-insecure
二进制日志记录选项,默认情况下是禁用的。有可能在这种情况下通过指定启用二进制日志记录——log-bin
选择。如果
——skip-log-bin
或——disable-log-bin
在启动时选项指定,二进制日志是禁用的,log_bin
系统变量设置为从
。如果这些选项,指定——log-bin
也是指定,指定的选项后优先。格式和管理信息的二进制日志,看看二进制日志。
-
系统变量 log_bin_basename
范围 全球 动态 没有 SET_VAR
提示应用没有 类型 文件名称 拥有基本的二进制日志文件的名称和路径,可以设置的
——log-bin
服务器选项。最大的可变长度是256。在MySQL 8.0中,如果——log-bin
选择是不提供的,名字是默认的基地binlog
。兼容MySQL 5.7,如果——log-bin
选择是提供任何字符串或一个空字符串,默认的基本名称
,使用主机的名称。默认位置是数据目录。host_name
本 -
命令行格式 ——log-bin-index = file_name
系统变量 log_bin_index
范围 全球 动态 没有 SET_VAR
提示应用没有 类型 文件名称 拥有基本的二进制日志索引文件名称和路径,可以设置的
——log-bin-index
服务器选项。最大的可变长度是256。 log_bin_trust_function_creators
命令行格式 ——log-bin-trust-function-creators[={|在}]
系统变量 log_bin_trust_function_creators
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
这个变量启用二进制日志时适用。它控制存储函数创作者是否可以信任不是创建存储函数,可能导致不安全事件写入二进制日志。如果设置为0(默认),用户不允许创建或改变,除非他们有存储功能
超级
除了特权创建程序
或改变日常
特权。设置0也实施了限制,必须声明一个函数确定的
特点,或读取SQL数据
或没有SQL
的特点。如果变量设置为1时,MySQL不执行这些限制存储函数的创建。这个变量也适用于创建触发器。看到存储程序的二进制日志。-
命令行格式 ——log-bin-use-v1-row-events[={|在}]
弃用 8.0.18 系统变量 log_bin_use_v1_row_events
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
只读的系统变量是弃用。设置系统变量
在
在服务器启动时启用基于行的复制副本运行MySQL服务器5.5和更早的写二进制日志使用版本1的二进制日志行事件,而不是二进制日志行事件默认版本2的MySQL 5.6。 -
命令行格式 ——log-slave-updates[={|在}]
系统变量 log_slave_updates
范围 全球 动态 没有 SET_VAR
提示应用没有 类型 布尔 默认值 在
是否收到的更新副本服务器从一个复制源服务器应该记录副本的二进制日志。
启用这个变量会导致收到的副本写更新源和复制SQL执行的线程来复制自己的二进制日志。二进制日志,控制的
——log-bin
选项,在缺省情况下是启用的,也必须上启用更新记录的副本。看到2.6节,“复制和二进制日志记录选项和变量”。log_slave_updates
在缺省情况下是启用的,除非您指定——skip-log-bin
禁用二进制日志,在这种情况下,MySQL也禁用默认副本更新日志。如果您需要禁用副本更新日志启用二进制日志时,指定——log-slave-updates =了
在服务器启动复制品。启用
log_slave_updates
使复制链接服务器。例如,您可能希望设置复制服务器使用这样的安排:A - B - > C >
在这里,
一个
作为复制的源B
,B
作为复制的源C
。对于这个工作,B
必须两个源和一个副本。启用了二进制日志log_slave_updates
启用,默认设置,收到更新一个
被记录的B
它的二进制日志,因此可以通过C
。 log_statements_unsafe_for_binlog
命令行格式 ——log-statements-unsafe-for-binlog[={|在}]
系统变量 log_statements_unsafe_for_binlog
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 在
如果遇到错误1592,控制生成的警告是否添加到错误日志。
-
命令行格式 ——master-verify-checksum[={|在}]
系统变量 master_verify_checksum
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 从
启用这个变量会导致源验证事件从二进制日志读取通过检查校验和,和停止一个错误事件的不匹配。
master_verify_checksum
默认情况下是禁用的。在这种情况下,事件源使用长度从二进制日志来验证事件,因此,只有从二进制日志读取完整的事件。 -
命令行格式 ——max-binlog-cache-size = #
系统变量 max_binlog_cache_size
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 18446744073709547520
最小值 4096年
最大值 18446744073709547520
块大小 4096年
如果一个事务需要这么多字节的内存多,服务器生成一个Multi-statement事务需要超过max_binlog_cache_size字节的存储错误。最小值是4096。的最大可能值是16 eib (exbibytes)。最大推荐值是4 gb;这是由于这样的事实:MySQL目前不能使用二进制日志位置大于4 gb。的值必须是4096的倍数。
max_binlog_cache_size
集的大小事务缓存;语句缓存的上限是由max_binlog_stmt_cache_size
系统变量。会话的可见性
max_binlog_cache_size
匹配的binlog_cache_size
系统变量;换句话说,改变它的值只会影响新课程开始后的值发生更改。 -
命令行格式 ——max-binlog-size = #
系统变量 max_binlog_size
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 1073741824
最小值 4096年
最大值 1073741824
块大小 4096年
如果写入二进制日志会导致当前日志文件大小超过这个变量的值,服务器旋转二进制日志(关闭当前文件并打开下一个)。最小值是4096个字节。最大的,默认值是1 gb。加密的二进制日志文件有一个额外的512字节的头,这是包含在
max_binlog_size
。事务是二进制日志写在一块,所以它永远不会分开几个二进制日志。因此,如果你有大的交易,你可能会看到比二进制日志文件
max_binlog_size
。如果
max_relay_log_size
的值是0,max_binlog_size
适用于继电器日志。GTIDs在服务器上使用,当
max_binlog_size
,如果系统表吗mysql.gtid_executed
无法访问写GTIDs从当前的二进制日志文件,二进制日志不能旋转。在这种情况下,根据其服务器响应binlog_error_action
设置。如果IGNORE_ERROR
,一个错误记录在服务器上和二进制日志是停止,或者如果ABORT_SERVER
设置,服务器关闭。 -
命令行格式 ——max-binlog-stmt-cache-size = #
系统变量 max_binlog_stmt_cache_size
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 18446744073709547520
最小值 4096年
最大值 18446744073709547520
块大小 4096年
如果nontransactional语句在事务需要更多的比这多字节的内存,服务器生成一个错误。最小值是4096。最大在32位平台上和默认值是4 gb和16 eb (eb)在64位平台上。的值必须是4096的倍数。
max_binlog_stmt_cache_size
集语句缓存的大小;事务缓存的上限是专门的治理max_binlog_cache_size
系统变量。 -
系统变量 original_commit_timestamp
范围 会话 动态 是的 SET_VAR
提示应用没有 类型 数字 供内部使用的复制。当重新执行一个事务在一个复制品,这是将事务提交时的原始来源,以时代以来微秒。这允许原始提交的时间戳在传播复制拓扑。
设置会话这个系统变量的值是一个受限制的操作。用户一定的会话
REPLICATION_APPLIER
特权(见复制权限检查),或特权足以限制会话变量设置(见系统变量的特权)。然而,请注意,变量不是用于用户设置;它将自动复制的基础设施。 -
系统变量 sql_log_bin
范围 会话 动态 是的 SET_VAR
提示应用没有 类型 布尔 默认值 在
这个变量控制是否启用二进制日志的日志记录当前会话(假设启用二进制日志本身)。默认值是
在
。禁用或启用二进制日志记录当前会话,设置会话sql_log_bin
变量来从
或在
。将这个变量设置为
从
会话临时禁用二进制日志而更改源你不希望复制到副本。设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。
不可能设置会话的价值
sql_log_bin
在一个事务或子查询。设置这个变量
从
防止GTIDs被分配给事务在二进制日志。如果您使用的是GTIDs复制,这意味着即使再次启用二进制日志后,GTIDs写入日志从这一点不占任何交易同时发生,所以实际上这些事务是迷路了。 -
命令行格式 ——sync-binlog = #
系统变量 sync_binlog
范围 全球 动态 是的 SET_VAR
提示应用没有 类型 整数 默认值 1
最小值 0
最大值 4294967295
控制频率MySQL服务器同步二进制日志到磁盘。
sync_binlog = 0
:禁用同步二进制日志磁盘的MySQL服务器。相反,MySQL服务器依赖于操作系统的二进制日志刷新到磁盘不时地为任何其他文件一样。这个设置提供了最佳的性能,但是在发生电源故障或操作系统崩溃,可能服务器已提交的事务,并没有同步二进制日志。sync_binlog = 1
:启用二进制日志的同步到磁盘之前,事务被提交。这是最安全的设置,但可能会对性能产生负面影响,由于增加磁盘写操作的数量。在发生电源故障或操作系统崩溃,失踪的事务从二进制日志只是处于准备状态。这允许自动恢复程序回滚事务,保证不丢失事务从二进制日志。sync_binlog =
,在那里N
N
一个值是0或1:二进制日志同步到磁盘后N
二进制日志提交组织已经收集了。在发生电源故障或操作系统崩溃,可能服务器已提交的事务,没有被刷新到二进制日志。此设置可能会对性能产生负面影响,由于增加磁盘写操作的数量。更高的价值提高了性能,但增加了数据丢失的风险。
最大可能的耐用性和一致性的复制设置使用
InnoDB
交易,使用这些设置:谨慎许多操作系统和一些磁盘硬件傻瓜涌到磁盘操作。他们可能会告诉mysqld平已经发生,即使它没有。在这种情况下,事务的持久性是不能保证即使有推荐的设置,而在最坏的情况下,断电会腐败
InnoDB
数据。使用一个依靠电池SCSI磁盘的磁盘高速缓存控制器或磁盘本身加速文件刷新,并使操作更安全。你也可以尝试禁用硬件缓存的磁盘写缓存。 transaction_write_set_extraction
命令行格式 ——transaction-write-set-extraction(=价值)
系统变量 transaction_write_set_extraction
范围 全球、会话 动态 是的 SET_VAR
提示应用没有 类型 枚举 默认值 XXHASH64
有效值 从
MURMUR32
XXHASH64
复制的源服务器多线程副本(副本
slave_parallel_workers
设置为大于0的值),在哪里binlog_transaction_dependency_tracking
被设置为WRITESET
或WRITESET_SESSION
生成依赖信息从源的写,transaction_write_set_extraction
提取指定算法用于散列写在一个事务。binlog_format
必须设置为行
改变这个系统变量的值。当
WRITESET
或WRITESET_SESSION
设置的值吗binlog_transaction_dependency_tracking
,transaction_write_set_extraction
必须设置为指定的算法(不设置从
)。默认在MySQL 8.0transaction_write_set_extraction
被设置为XXHASH64
。的当前值binlog_transaction_dependency_tracking
是WRITESET
或WRITESET_SESSION
,你不能改变的价值transaction_write_set_extraction
。组复制,
transaction_write_set_extraction
必须设置为XXHASH64
。提取的过程写从事务组复制用于在所有小组成员冲突检测和认证。看到组复制需求。MySQL 8.0.14,设置会话这个系统变量的值是一个受限制的操作。会话用户必须有足够的特权设置限制会话变量。看到系统变量的特权。