参考官方文档:
https://dev.mysql.com/doc/refman/5.7/en/replication-options.html
--server-id:
默认值是0,小为0,大为 4294967295
此选项指定在server_id系统变量中设置的服务器标识。 在MySQL 5.7中,如果启用了二进制日志记录,则必须指定--server-id选项,否则不允许服务器启动。
server_id系统变量默认设置为0。 在复制主服务器和每个复制从服务器上,必须指定--server-id选项以建立1到2**32之间的复制ID。“”表示每个ID必须与由任何其他复制主机或从机使用的ID不同。 例如,server-id = 3。
如果服务器ID设置为0,则进行二进制日志记录,但服务器ID为0的主服务器拒绝来自从服务器的任何连接,服务器ID为0的从服务器拒绝连接到主服务器。 请注意,虽然您可以将服务器ID动态更改为非零值,但这样做不会立即启动复制。 您必须更改服务器ID,然后重新启动服务器以初始化复制从站。
server_uuid
在MySQL 5.7中,除了用户提供的--server-id之外,服务器还生成一个真正的UUID。 这是全局的,只读变量server_uuid。
注意:
MySQL 5.7中server_uuid系统变量的存在并不会改变为每个MySQL服务器设置--server-id的要求,这是准备和运行MySQL复制的一部分,如本节前面所述。
启动时,MySQL服务器自动获取UUID,如下所示:
1.尝试读取和使用文件data_dir/auto.cnf中编写的UUID(其中data_dir是服务器的数据目录)。
2.如果找不到data_dir/auto.cnf,则生成新的UUID并将其保存到此文件,必要时创建该文件。
auto.cnf文件的格式类似于my.cnf或my.ini文件的格式。 在MySQL 5.7中,auto.cnf只有一个包含单个server_uuid设置和值的[auto]部分; 文件的内容类似于此处显示的内容:
[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562
重要
auto.cnf文件自动生成; 不要尝试编写或修改此文件。
使用MySQL复制时,主服务器和从服务器知道彼此的UUID。 可以在SHOW SLAVE HOSTS的输出中看到从属UUID的值。 执行START SLAVE后,在SHOW SLAVE STATUS的输出中,从站上可以使用主UUID的值。
注意:
发出STOP SLAVE或RESET SLAVE语句不会重置从站上使用的主站UUID。
服务器的server_uuid也在GTID中用于源自该服务器的事务。
启动时,如果它们的master的UUID与自己的相等,slav额I/O线程会生成错误并终止,除非已设置--replicate-same-server-id选项。 此外,如果满足以下任一条件,则从属I / O线程会生成警告:
- 没有预期的server_uuid的master存在。
- 虽然没有执行CHANGE MASTER TO语句,但主服务器的server_uuid已更改。
16.1.6 复制和二进制选项和变量参考
abort-slave-event-count:mysql-test用于调试和复制测试的选项
binlog_gtid_simple_recovery:控制在GTID恢复期间迭代二进制日志的方式
Com_change_master:CHANGE MASTER TO语句的计数
Com_show_master_status:SHOW MASTER STATUS语句的计数
Com_show_new_master:SHOW NEW MASTER语句的计数
Com_show_slave_hosts:SHOW SLAVE HOSTS语句的计数
Com_show_slave_status:SHOW SLAVE STATUS语句的计数
Com_show_slave_status_nonblocking:SHOW SLAVE STATUS NONBLOCKING语句的计数
Com_slave_start:START SLAVE语句的计数
Com_slave_stop:STOP SLAVE语句的计数
disconnect-slave-event-count:mysql-test用于调试和复制测试的选项
enforce-gtid-consistency:防止执行无法以事务安全方式记录的语句
enforce_gtid_consistency:防止执行无法以事务安全方式记录的语句
execution-gtids-compression-period:已弃用,将在以后的版本中删除;使用重命名的gtid-executed-compression-period代替
executed_gtids_compression_period:已弃用,将在以后的版本中删除;改为使用重命名的gtid_executed_compression_period
expire_logs_days:自动二进制日志文件删除的天数。 默认值为0,表示“不自动删除。”可能的删除发生在启动时和刷新二进制日志时。
默认是小值0,大值是99
要手动删除二进制日志文件,请使用PURGE BINARY LOGS语句。
gtid-executed-compression-period:每次发生多少事务时压缩gtid_executed表。 0表示从不压缩此表。仅在禁用二进制日志记录时适用。
gtid-mode:控制是否启用基于GTID的日志记录以及日志可以包含的事务类型
gtid_executed:全局:二进制日志(全局)或当前事务(会话)中的所有GTID。只读。
gtid_executed_compression_period:每次发生多少事务时压缩gtid_executed表。 0表示从不压缩此表。仅在禁用二进制日志记录时适用。
gtid_mode:控制是否启用基于GTID的日志记录以及日志可以包含的事务类型
gtid_next:指定要执行的下一个语句的GTID;请参阅文档了解详情
gtid_owned:此客户端(会话)或所有客户端拥有的GTID集合以及所有者的线程ID(全局)。只读。
gtid_purged:从二进制日志中清除的所有GTID的集合
init_slave:从属连接到主服务器时执行的语句
log-bin-trust-function-creators:如果等于0(默认值),那么当使用--log-bin时,只允许具有SUPER权限的用户创建存储函数,并且仅当创建的函数有不打破二进制日志
log-slave-updates:告诉slave将其SQL线程执行的更新记录到自己的二进制日志中
log_builtin_as_identified_by_password:是否以向后兼容的方式记录CREATE / ALTER USER,GRANT
默认是OFF
此变量影响用户管理语句的二进制日志记录。 启用后,该变量具有以下效果:
涉及内置身份验证插件的CREATE USER语句的二进制日志记录会重写语句以包含IDENTIFIED BY PASSWORD子句。
SET PASSWORD语句记录为SET PASSWORD语句,而不是重写为ALTER USER语句。
SET PASSWORD语句被更改为记录密码的哈希值而不是提供的明文(未加密)密码。
启用此变量可确保更好地兼容5.6和5.7.6之前的从站的跨版本复制,以及在二进制日志中期望此语法的应用程序。
这个变量是在MySQL 5.7.9中添加的。 它取代了log_backward_compatible_user_definitions变量。
log_slave_updates:从属服务器是否应将其SQL线程执行的更新记录到自己的二进制日志中。 必须在从站上启用二进制日志记录才能使此变量生效
默认是FALSE
log_statements_unsafe_for_binlog:如果遇到错误1592,则控制是否将生成的警告添加到错误日志中。
默认是ON
master-info-file:记住主服务器的文件的位置和名称以及主服务器二进制日志中I / O复制线程的位置
master-info-repository:是否将master的二进制日志中的主状态信息和复制I/O线程位置写入文件或表
master-retry-count:从站在放弃之前连接到主站的尝试次数
master_info_repository:是否将主服务器的二进制日志中的主状态信息和复制I/O线程位置写入文件或表
max_relay_log_size:如果非零,则当其大小超过此值时,会自动轮换中继日志。如果为零,则发生旋转的大小由max_binlog_size的值确定。
relay-log:用于中继日志的位置和基本名称
relay-log-index:用于保存后一个中继日志列表的文件的位置和名称
relay-log-info-file:记住SQL复制线程在中继日志中的位置的文件的位置和名称
relay-log-info-repository:是否将复制SQL线程在中继日志中的位置写入文件或表
relay-log-recovery:启动时从master自动恢复中继日志文件
relay_log_basename:中继日志的完整路径,包括文件名
relay_log_index:中继日志索引文件的名称
relay_log_info_file:从站记录中继日志信息的文件名
relay_log_info_repository:是否将复制SQL线程在中继日志中的位置写入文件或表
relay_log_purge:确定是否清除中继日志
默认是TRUE,禁用或启用自动清除不需要的中继日志文件。 默认值为1(ON)。
relay_log_recovery:启动时是否从master自动恢复中继日志文件;必须启用崩溃安全从站
默认是FALSE
在服务器启动后立即启用自动中继日志恢复。 恢复过程会创建一个新的中继日志文件,将SQL线程位置初始化为此新的中继日志,并将I / O线程初始化为SQL线程位置。 然后继续从主站读取中继日志。 这个全局变量是只读的; 可以通过使用--relay-log-recovery选项启动从站来更改其值,该选项应在意外停止复制从站之后使用,以确保不会处理可能损坏的中继日志。
relay_log_space_limit:用于所有中继日志的大空间
默认是0,无限制,所有中继日志使用的大空间量。
replicate-do-db:告诉从属SQL线程限制复制到指定的数据库
replicate-do-table:告诉从属SQL线程将复制限制到指定的表
replicate-ignore-db:告诉从属SQL线程不要复制到指定的数据库
--可以不复制系统的数据库,这样,主从上的用户权限可以不一致
replicate-ignore-table:告诉从属SQL线程不要复制到指定的表
replicate-rewrite-db:使用与原始名称不同的名称更新数据库
replicate-same-server-id:在复制中,如果设置为1,则不要跳过具有我们服务器ID的事件
replicate-wild-do-table:告诉从属线程将复制限制为与指定通配符模式匹配的表
replicate-wild-ignore-table:告诉从属线程不要复制到与给定通配符模式匹配的表
report-host:从站注册期间向主站报告的从站的主机名或IP
report-password:从服务器应向主服务器报告的任意密码。与MySQL复制用户帐户的密码不同。
report-port:从站注册时向主站报告的连接从站的端口
report-user:从服务器应向主服务器报告的任意用户名。与MySQL复制用户帐户使用的名称不同。
Rpl_semi_sync_master_clients:半同步从站的数量
rpl_semi_sync_master_enabled:是否在主服务器上启用了半同步复制
Rpl_semi_sync_master_net_avg_wait_time:主设备等待从设备回复的平均时间
Rpl_semi_sync_master_net_wait_time:主设备等待从设备回复的总时间
Rpl_semi_sync_master_net_waits:主服务器等待从服务器回复的总次数
Rpl_semi_sync_master_no_times:主服务器关闭半同步复制的次数
Rpl_semi_sync_master_no_tx:未成功确认的提交数
Rpl_semi_sync_master_status:半主机上的半同步复制是否可操作
Rpl_semi_sync_master_timefunc_failures:调用时间函数时主服务器失败的次数
rpl_semi_sync_master_timeout:等待从机确认的毫秒数
rpl_semi_sync_master_trace_level:主服务器上的半同步复制调试跟踪级别
Rpl_semi_sync_master_tx_avg_wait_time:主人等待每笔交易的平均时间
Rpl_semi_sync_master_tx_wait_time:主服务器等待事务的总时间
Rpl_semi_sync_master_tx_waits:主服务器等待事务的总次数
rpl_semi_sync_master_wait_for_slave_count:在继续操作之前,主服务器必须接收多少个从属确认
rpl_semi_sync_master_wait_no_slave:即使没有从设备,主设备是否等待超时
rpl_semi_sync_master_wait_point:从事务收据确认的等待点
Rpl_semi_sync_master_wait_pos_backtraverse:主服务器等待二进制坐标低于先前等待事件的事件的总次数
Rpl_semi_sync_master_wait_sessions:当前正在等待从站回复的会话数
Rpl_semi_sync_master_yes_tx:成功确认的提交数
rpl_semi_sync_slave_enabled:是否在从站上启用了半同步复制
控制是否在从站上启用半同步复制。 要启用或禁用插件,请将此变量分别设置为ON或OFF(或1或0)。 默认为OFF。
仅当安装了从属端半同步复制插件时,此变量才可用。
Rpl_semi_sync_slave_status:半同步复制是否可在从站上运行
rpl_semi_sync_slave_trace_level:从站上的半同步复制调试跟踪级别
默认是32
rpl_stop_slave_timeout:设置STOP SLAVE在超时前等待的秒数
默认是 31536000,小值为2,大值为 31536000
您可以通过设置此变量来控制STOP SLAVE在超时之前等待的时间长度(以秒为单位)。 这可用于避免使用与从属的不同客户端连接的STOP SLAVE和其他从属SQL语句之间的死锁。
rpl_stop_slave_timeout的大值和默认值为31536000秒(1年)。 短为2秒。 对此变量的更改将对后续的STOP SLAVE语句生效。
此变量仅影响发出STOP SLAVE语句的客户端。 达到超时后,发出客户端将返回一条错误消息,指出命令执行不完整。 然后客户端停止等待从属线程停止,但从属线程继续尝试停止,并且STOP SLAVE指令仍然有效。 一旦从属线程不再忙,就会执行STOP SLAVE语句并且从站停止。
server_uuid:服务器启动时自动(重新)生成的服务器全局ID
show-slave-auth-info:在此主服务器上的SHOW SLAVE HOSTS中显示用户名和密码
simplified_binlog_gtid_recovery:控制在GTID恢复期间迭代二进制日志的方式
skip-slave-start:如果设置,则slave不会自动启动
slave-checkpoint-group:在调用检查点操作以更新进度状态之前,多线程从站处理的大事务数。 NDB群集不支持。
slave-checkpoint-period:在此毫秒数后更新多线程从站的进度状态,并将中继日志信息刷新到磁盘。 NDB群集不支持。
slave-load-tmpdir:从属服务器在复制LOAD DATA INFILE语句时应放置其临时文件的位置
默认值是/tmp
slave-max-allowed-packet:可以从复制主机发送到从机的数据包的大大小(以字节为单位);覆盖max_allowed_packet
slave_net_timeout:在中止读取之前等待来自主/从连接的更多数据的秒数
默认值是 60,小值是1
设置此变量不会立即生效。 变量的状态适用于所有后续START SLAVE命令。
slave-parallel-type:告诉slave使用时间戳信息(LOGICAL_CLOCK)或数据库分区(DATABASE)来并行化事务。
slave-parallel-workers:并行执行复制事务的应用程序线程数。默认值为4个应用程序线程。设置为0以禁用从属多线程。 MySQL Cluster不支持。
slave-pending-jobs-size-max:保存尚未应用事件的从属工作队列的大大小
slave-rows-search-algorithms:确定用于从站更新批处理的搜索算法。INDEX_SEARCH,TABLE_SCAN,HASH_SCAN中的任何2或3
slave-skip-errors:当查询从提供的列表中返回错误时,告诉从属线程继续复制
slave_checkpoint_group:在调用检查点操作以更新进度状态之前,多线程从站处理的大事务数。 NDB群集不支持。
默认值是512
小值是32
大值是 524280
设置在调用检查点操作以更新其状态之前多线程从站可以处理的大事务数,如SHOW SLAVE STATUS所示。 设置此变量对未启用多线程的从站没有影响。 设置此变量不会立即生效。 变量的状态适用于所有后续START SLAVE命令
slave_checkpoint_period:在此毫秒数后更新多线程从站的进度状态并将中继日志信息刷新到磁盘。 NDB群集不支持。
默认是300,小值是1,大值是4G
设置在调用检查点操作以更新多线程从站状态之前允许通过的大时间(以毫秒为单位),如SHOW SLAVE STATUS所示。 设置此变量对未启用多线程的从站没有影响。 设置此变量会立即对所有复制通道生效,包括运行通道。
slave_compressed_protocol:在主/从 协议上使用压缩
默认是OFF
如果从站和主站都支持,则是否使用从站/主站协议的压缩。 对此变量的更改将对后续连接尝试生效; 这包括在发出START SLAVE语句之后,以及由正在运行的I / O线程进行的重新连接(例如在发出CHANGE MASTER TO MASTER_RETRY_COUNT语句之后)。
slave_exec_mode:允许在IDEMPOTENT模式(键和其他一些被抑制的错误)和STRICT模式之间切换从属线程; STRICT模式是默认设置,但是NDB Cluster默认是DEMPOTENT
控制从属线程在复制期间如何解决冲突和错误。 IDEMPOTENT模式可以抑制重复键和没有key的错误; STRICT意味着不会发生这种抑制。
IDEMPOTENT模式适用于多主复制,循环复制以及NDB群集复制的一些其他特殊复制方案。
Slave_heartbeat_period:从属的复制心跳间隔,以秒为单位
slave_max_allowed_packet:可以从复制主机发送到从机的数据包的大大小(以字节为单位);覆盖max_allowed_packet
Slave_open_temp_tables:从属SQL线程当前打开的临时表的数量
slave_parallel_type:告诉从服务器使用时间戳信息(LOGICAL_CLOCK)或数据库分区(DATABASE)来并行化事务。
slave_parallel_workers:并行执行复制事务的应用程序线程数。值为0将禁用从属多线程。 MySQL Cluster不支持。
slave_pending_jobs_size_max:包含尚未应用事件的从属工作队列的大大小
slave_preserve_commit_order:确保从属工作程序的所有提交都与主服务器上的顺序相同,以便在使用并行应用程序线程时保持一致性。
Slave_retried_transactions:自启动以来复制从属SQL线程已重试事务的总次数
slave_rows_search_algorithms:确定用于从站更新批处理的搜索算法。INDEX_SEARCH,TABLE_SCAN,HASH_SCAN中的任何2或3。
Slave_rows_last_search_algorithm_used:此从属服务器近使用的搜索算法,用于查找基于行的复制(索引,表或散列扫描)的行
Slave_running:此服务器作为复制从站的状态(从站I / O线程状态)
slave_transaction_retries:从属SQL线程在放弃和停止锁定等待超时失败的情况下,在放弃和停止之前重试事务的次数
slave_type_conversions:控制复制从属上的类型转换模式。值是列表中零个或多个元素的列表:ALL_LOSSY,ALL_NON_LOSSY。设置为空字符串以禁止主服务器和从服务器之间的类型转换。
sql_log_bin:切换二进制日志记录
默认是on
此变量控制是否为当前会话启用了对二进制日志的日志记录(假设本身已启用二进制日志)。 默认值为ON。 要禁用或启用当前会话的二进制日志记录,请将会话sql_log_bin变量设置为OFF或ON。
将此变量设置为OFF以使会话暂时禁用二进制日志记录,同时对主服务器进行更改,而不希望将其复制到从服务器。
无法在事务或子查询中设置sql_log_bin的会话值。
将此变量设置为OFF可防止将GTID分配给二进制日志中的事务。 如果您使用GTID进行复制,这意味着即使稍后再次启用二进制日志记录,从此时写入日志的GTID也不会考虑同时发生的任何事务,因此实际上这些事务将丢失。
全局sql_log_bin变量是只读的,不能修改。 全球范围已弃用,将在未来的MySQL版本中删除。
sql_slave_skip_counter:从服务器应跳过的主服务器的事件数。与GTID复制不兼容。
sync_binlog:每次#th事件后,将二进制日志同步刷新到磁盘
默认是1,小值是0
0:禁用MySQL服务器将二进制日志同步到磁盘。 相反,MySQL服务器依赖操作系统不时地将二进制日志刷新到磁盘,就像对任何其他文件一样。 此设置提供佳性能,但在电源故障或操作系统崩溃的情况下,服务器可能已提交尚未同步到二进制日志的事务。
1:
在提交事务之前,允许将二进制日志同步到磁盘。 这是安全的设置,但由于磁盘写入次数增加,可能会对性能产生负面影响。 在电源故障或操作系统崩溃的情况下,二进制日志中缺少的事务仅处于准备状态。 这允许自动恢复例程回滚事务,这保证了二进制日志中没有丢失任何事务。
为了将InnoDB与事务一起使用的复制设置具有大的持久性和一致性,请使用以下设置:
- sync_binlog=1
- innodb_flush_log_at_trx_commit=1
sync_master_info:在每个#th事件后将http://master.info同步到磁盘
sync_relay_log:每次#th事件后将中继日志同步到磁盘
sync_relay_log_info:每个#th事件后将http://relay.info文件同步到磁盘
transaction_write_set_extraction:定义用于散列在事务期间提取的写入的算法
默认是OFF
定义用于生成标识与事务关联的写入的哈希的算法。 如果使用组复制,则哈希值将用于分布式冲突检测和处理。 在运行组复制的64位系统上,我们建议将其设置为XXHASH64,以避免不必要的哈希冲突,从而导致证书失败和用户事务回滚。
注意:
当binlog_transaction_dependency_tracking设置为WRITESET或WRITESET_SESSION时,不能更改此变量的值。
二进制日志相关的变量:
binlog-checksum:启用/禁用二进制日志校验和
binlog-do-db:限制二进制日志记录到特定数据库
binlog_format:指定二进制日志的格式
binlog-ignore-db:告诉主服务器不应将对给定数据库的更新记录到二进制日志中
binlog-row-event-max-size:二进制日志大事件大小
binlog-rows-query-log-events:在使用基于行的日志记录时,允许记录行查询日志事件。默认情况下禁用。为5.6之前的从站/阅读器生成日志时不要启用。
Binlog_cache_disk_use:使用临时文件而不是二进制日志缓存的事务数
binlog_cache_size:在事务期间保存二进制日志的SQL语句的高速缓存大小
默认是32768
用于在事务期间保存对二进制日志的更改的缓存大小。 如果服务器支持任何事务存储引擎并且服务器启用了二进制日志(--log-bin选项),则为每个客户端分配二进制日志高速缓存。 如果您经常使用大型事务,则可以增加此高速缓存大小以获得更好的性能。 Binlog_cache_use和Binlog_cache_disk_use状态变量可用于调整此变量的大小。
binlog_cache_size仅设置事务高速缓存的大小; 语句高速缓存的大小由binlog_stmt_cache_size系统变量控制。
Binlog_cache_use:使用临时二进制日志高速缓存的事务数
binlog_checksum:启用/禁用二进制日志校验和
默认值是CRC32
启用时,此变量使主服务器为二进制日志中的每个事件写入校验和。 binlog_checksum支持值NONE(禁用)和CRC32。 默认值为CRC32。 您无法在事务中更改binlog_checksum的值。
当禁用binlog_checksum(值为NONE)时,服务器通过写入并检查每个事件的事件长度(而不是校验和)来验证它是否仅将完整事件写入二进制日志。
更改此变量的值会导致二进制日志旋转; 校验和总是写入整个二进制日志文件,永远不会只写入一部分。
将主服务器上的此变量设置为从服务器无法识别的值会导致从服务器将其自己的binlog_checksum值设置为NONE,并停止复制并显示错误。 (bug 13553750,bug 61096)如果需要考虑与旧版从站的向后兼容性,则可能需要将该值明确设置为NONE。
binlog_direct_non_transactional_updates:使用语句格式将更新导致非事务引擎直接写入二进制日志。使用前请参阅文档。
默认是OFF
由于并发问题,当事务包含对事务和非事务表的更新时,从属可能会变得不一致。 MySQL试图通过将非事务性语句写入事务高速缓存来保持这些语句之间的因果关系,事务高速缓存在提交时刷新。 但是,当代表事务对非事务表进行的修改对其他连接立即可见时会出现问题,因为这些更改可能不会立即写入二进制日志。
binlog_direct_non_transactional_updates会导致非事务性表的更新直接写入二进制日志,而不是事务高速缓存。
binlog_direct_non_transactional_updates仅适用于使用基于语句的二进制日志记录格式复制的语句; 也就是说,它仅在binlog_format的值为STATEMENT时,或者当binlog_format为MIXED且使用基于语句的格式复制给定语句时才有效。 当二进制日志格式为ROW时,或者当binlog_format设置为MIXED并且使用基于行的格式复制给定语句时,此变量。
binlog_error_action:控制服务器无法写入二进制日志时发生的情况
默认值是 ABORT_SERVER,有效值为 ABORT_SERVER 和 IGNORE_ERROR
控制当服务器遇到错误时发生的情况,例如无法写入,刷新或同步二进制日志,这可能导致主服务器日志变得不一致,并且复制从服务器失去同步。
在MySQL 5.7.7及更高版本中,此变量默认为ABORT_SERVER,这使服务器在遇到二进制日志的此类错误时停止日志记录并关闭。 在服务器重新启动时,将提交所有先前准备的和二进制记录的事务,同时中止由于错误而准备但未进行二进制记录的任何事务。
当binlog_error_action设置为IGNORE_ERROR时,如果服务器遇到此类错误,它将继续正在进行的事务,记录错误然后停止记录,并继续执行更新。 要恢复二进制日志记录,必须再次启用log_bin。 这提供了与旧版MySQL的向后兼容性。
binlog_group_commit_sync_delay:设置在将事务同步到磁盘之前等待的微秒数
默认是0,大值是100000
控制二进制日志提交在将二进制日志文件同步到磁盘之前等待的微秒数。 默认情况下,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的情况下,在proceeding之前)。 当sync_binlog设置为大于1的值n时,将在每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_delay指定的当前延迟之前要等待的大事务数
默认是小值0,大是1000000
如果binlog_group_commit_sync_delay 设置为0,那么这个参数。
binlog_order_commits:是否以与写入二进制日志相同的顺序提交
默认是ON
在主服务器上启用此变量(默认值)时,事务的外部化顺序与写入二进制日志的顺序相同。 如果禁用,则可以并行提交事务。 在某些情况下,禁用此变量可能会产生性能增量。
binlog_row_image:记录行更改时使用完整或小image
默认是full(记录所有字段)
minimal(只记录小被变更的字段,字段需要被行定义。仅记录后映像中由SQL语句指定值或由自动增量生成的那些列。)
--必须要有主键
noblob(记录所有字段,除了不需要的BLOB和TEXT字段)
对于基于MySQL的行复制,此变量确定如何将行images写入二进制日志。
在基于MySQL的行复制中,每个行更改事件包含两个image,一个是前映像,其列在搜索要更新的行时与之匹配,以及包含更改的“之后”image。 通常,MySQL会记录前后image的完整行(即所有列)。 但是,并不是必须在两个映像中包含每一列,并且我们通常可以通过仅记录实际需要的列来节省磁盘,内存和网络使用。
注意:
删除行时,仅记录前映像,因为删除后没有更改的值要传播。 插入行时,仅记录后映像,因为没有要匹配的现有行。 只有在更新行时,才需要前后映像,并且都写入二进制日志。
对于前映像,只需记录标识行所需的小列集。 如果包含该行的表具有主键,则只将主键列写入二进制日志。 否则,如果表具有键,并且键的所有列都为NOT NULL,则只需记录键中的列。 (否则必须在前映像中使用所有列并进行记录。)在后映像中,只需要记录实际更改的列。
当二进制日志记录格式为STATEMENT时,设置此变量。 当binlog_format为MIXED时,binlog_row_image的设置将应用于使用基于行的格式记录的更改,但此设置对作为语句记录的更改没有影响。
在全局或会话级别设置binlog_row_image不会导致隐式提交; 这意味着可以在事务正在进行时更改此变量,而不会影响事务。
binlog_rows_query_log_events:如果为TRUE,则在基于行的日志记录模式下启用行查询日志事件。默认为FALSE。为5.6之前的复制从站或其他阅读器生成日志时不要启用。
Binlog_stmt_cache_disk_use:使用临时文件而不是二进制日志语句高速缓存的非事务性语句的数量
binlog_stmt_cache_size:在事务期间保存二进制日志的非事务语句的高速缓存大小
默认值32768
小值4096
此变量确定二进制日志的高速缓存大小,以保存事务期间发出的非事务性语句。 如果服务器支持任何事务存储引擎并且服务器启用了二进制日志(--log-bin选项),则为每个客户端分配单独的二进制日志事务和语句高速缓存。 如果在事务期间经常使用大型非事务性语句,则可以增加此高速缓存大小以获得更好的性能。 Binlog_stmt_cache_use和Binlog_stmt_cache_disk_use状态变量可用于调整此变量的大小。
binlog_cache_size系统变量设置事务高速缓存的大小。
Binlog_stmt_cache_use:使用临时二进制日志语句高速缓存的语句数
binlog_transaction_dependency_tracking:依赖关系信息的来源(提交时间戳或事务写入集),从中可以评估slave的多线程应用程序可以并行执行哪些事务。
默认值是 commit_order,还可以是WRITEST,WRITEST_SESSION
binlog_transaction_dependency_history_size:
设置内存中保留的行哈希数的上限,用于查找上次修改给定行的事务。 达到此哈希值后,将清除历史记录。
默认是25000 小值为1,大值为100000
binlogging_impossible_mode:已弃用,将在以后的版本中删除。请改用重命名的binlog_error_action。
Com_show_binlog_events:SHOW BINLOG EVENTS语句的计数
Com_show_binlogs:SHOW BINLOGS语句的计数
log-bin-use-v1-row-events:使用版本1二进制日志行事件
log_bin_basename:二进制日志文件的路径和基本名称
log_bin_use_v1_row_events:显示服务器是否正在使用版本1二进制日志行事件
master-verify-checksum:使master在从二进制日志中读取时检查校验和
master_verify_checksum:导致master从二进制日志中读取校验和
默认是OFF
启用此变量会导致主服务器在读取二进制日志时检查校验和。 master_verify_checksum默认是禁用的; 在这种情况下,master使用二进制日志中的事件长度来验证事件,这样从二进制日志中只读取完整事件。
max-binlog-dump-events:mysql-test用于调试和测试复制的选项
max_binlog_cache_size:可用于限制用于缓存多语句事务的总大小
默认是大值 16EB
max_binlog_cache_size仅设置事务高速缓存的大小; 语句高速缓存的上限由max_binlog_stmt_cache_size系统变量控制。
max_binlog_cache_size会话的可见性与binlog_cache_size系统变量的会话可见性相匹配; 换句话说,更改其值只会影响值更改后启动的新会话。
max_binlog_size:当大小超过此值时,将自动轮换二进制日志
小值是4096 ,默认是大值1G
如果对二进制日志的写入导致当前日志文件大小超过此变量的值,则服务器将旋转二进制日志(关闭当前文件并打开下一个文件)。 小值为4096字节。 大值和默认值为1GB。
事务会写入二进制日志中的一个chunk,它永远不会在几个二进制日志之间拆分。 因此,如果您有大事务,您可能会看到大于max_binlog_size的二进制日志文件。
如果max_relay_log_size为0,则max_binlog_size的值也适用于中继日志。
max_binlog_stmt_cache_size:可用于限制用于在事务期间缓存所有非事务语句的总大小
slave-sql-verify-checksum:当从中继日志中读取时,slave会检查校验和
slave_sql_verify_checksum:当从中继日志中读取时,slave会检查校验和
sporadic-binlog-dump-fail:mysql-test用于调试和测试复制的选项
16.1.6.2 复制master 选项和变量
本节介绍可在复制主服务器上使用的服务器选项和系统变量。 您可以在命令行或选项文件中指定选项。 您可以使用SET指定系统变量值。
在主服务器和每个从服务器上,必须使用server-id选项来建立的复制ID。 对于每个服务器,您应该选择1到2**32-1范围内的正整数,并且每个ID必须与任何其他复制主服务器或从服务器使用的每个其他ID不同。 示例:server-id = 3。
复制主机的启动选项
以下列表描述了用于控制复制主服务器的启动选项。 与复制相关的系统变量将在本节后面讨论。
- --show-slave-auth-info
默认值是 FALSE
使用--report-user和--report-password选项在主服务器上显示主服务器上SHOW SLAVE HOSTS输出中的从属用户名和密码。
复制主机上使用的系统变量
以下系统变量用于控制复制主机:
- auto_increment_increment
默认值是1,小值是1,大值是65535
auto_increment_increment和auto_increment_offset旨在用于主 - 主复制,并可用于控制AUTO_INCREMENT列的操作。 两个变量都具有全局值和会话值,并且每个变量都可以使用介于1和65,535之间的整数值。 将这两个变量中的任何一个的值设置为0会导致其值设置为1。 尝试将这两个变量中的任何一个的值设置为大于65,535或小于0的整数会导致其值设置为65,535。 尝试将auto_increment_increment或auto_increment_offset的值设置为非整数值会产生错误,并且变量的实际值保持不变。
注意:
auto_increment_increment也支持与NDB表一起使用。
这两个变量会影响AUTO_INCREMENT列的行为,如下所示:
- auto_increment_increment控制连续列值之间的间隔。
- auto_increment_offset确定AUTO_INCREMENT列值的起始点。 请考虑以下情况,假设这些语句在与auto_increment_increment描述中给出的例子相同的会话期间执行:
mysql> SET @@auto_increment_offset=5;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 5 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> CREATE TABLE autoinc2
-> (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY); Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc2;
+-----+
| col |
+-----+
| 5 |
| 15 |
| 25 |
| 35 |
+-----+
4 rows in set (0.02 sec)
当auto_increment_offset的值大于auto_increment_increment的值时,将忽略auto_increment_offset的值。
如果更改了这些变量中的任何一个,然后将新行插入到包含AUTO_INCREMENT列的表中,则结果可能看似违反直觉,因为计算了一系列AUTO_INCREMENT值而不考虑列中已存在的任何值,而且插入的下一个值是大于AUTO_INCREMENT列中的当前大值的系列中的小值。 该系列计算如下:
auto_increment_offset + N ×auto_increment_increment
其中N是系列[1,2,3,...]中的正整数值。 例如:
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 5 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
+-----+
4 rows in set (0.00 sec)
mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
| 35 |
| 45 |
| 55 |
| 65 |
+-----+
8 rows in set (0.00 sec)
显示的auto_increment_increment和auto_increment_offset的值生成5 + N×10系列,即[5,15,25,35,45,...]。 INSERT之前的col列中出现的高值为31,AUTO_INCREMENT系列中的下一个可用值为35,因此col的插入值从该点开始,结果如SELECT查询所示。
不可能将这两个变量的影响限制在一个表中; 这些变量控制MySQL服务器上所有表中所有AUTO_INCREMENT列的行为。 如果设置了任一变量的全局值,则其效果将持续存在,直到通过设置会话值更改或覆盖全局值,或直到重新启动mysqld。 如果设置了本地值,则新值将影响当前用户在会话期间向其插入新行的所有表的AUTO_INCREMENT列,除非在该会话期间更改了值。
auto_increment_increment的默认值为1。