Startup Options Used with Binary Logging
System Variables Used with Binary Logging
You can use the mysqld options and system variables that are described in this section to affect the operation of the binary log as well as to control which statements are written to the binary log. For additional information about the binary log, see Section 5.4.4, “The Binary Log”. For additional information about using MySQL server options and system variables, see Section 5.1.4, “Server Command Options”, and Section 5.1.5, “Server System Variables”.
The following list describes startup options for enabling and configuring the binary log. System variables used with binary logging are discussed later in this section.
-
Command-Line Format --binlog-row-event-max-size=#Permitted Values (32-bit platforms) Type integer Default 8192Min Value 256Max Value 4294967295Permitted Values (64-bit platforms) Type integer Default 8192Min Value 256Max Value 18446744073709551615Specify the maximum size of a row-based binary log event, in bytes. Rows are grouped into events smaller than this size if possible. The value should be a multiple of 256. The default is 8192. See Section 16.2.1, “Replication Formats”.
-
Command-Line Format --log-binSystem Variable Name log_binVariable Scope Global Dynamic Variable No Permitted Values Type file name Enable binary logging. The server logs all statements that change data to the binary log, which is used for backup and replication. See Section 5.4.4, “The Binary Log”.
The option value, if given, is the base name for the log sequence. The server creates binary log files in sequence by adding a numeric suffix to the base name. It is recommended that you specify a base name (see Section B.5.7, “Known Issues in MySQL”, for the reason). Otherwise, MySQL uses
as the base name.host_name-binWhen the server reads an entry from the index file, it checks whether the entry contains a relative path, and if it does, the relative part of the path in replaced with the absolute path set using the
--log-binoption. An absolute path remains unchanged; in such a case, the index must be edited manually to enable the new path or paths to be used. (In older versions of MySQL, manual intervention was required whenever relocating the binary log or relay log files.) (Bug #11745230, Bug #12133)Setting this option causes the
log_binsystem variable to be set toON(or1), and not to the base name. The binary log file name (with path) is available as thelog_bin_basenamesystem variable.In MySQL 5.7.3 and later, if you specify this option without also specifying a
--server-id, the server is not allowed to start. (Bug #11763963, Bug #56739) -
Command-Line Format --log-bin-index=file_namePermitted Values Type file name The index file for binary log file names. See Section 5.4.4, “The Binary Log”. If you omit the file name, and if you did not specify one with
--log-bin, MySQL usesas the file name.host_name-bin.index --log-bin-trust-function-creators[={0|1}]Command-Line Format --log-bin-trust-function-creatorsSystem Variable Name log_bin_trust_function_creatorsVariable Scope Global Dynamic Variable Yes Permitted Values Type boolean Default FALSEThis option sets the corresponding
log_bin_trust_function_creatorssystem variable. If no argument is given, the option sets the variable to 1.log_bin_trust_function_creatorsaffects how MySQL enforces restrictions on stored function and trigger creation. See Section 23.7, “Binary Logging of Stored Programs”.--log-bin-use-v1-row-events[={0|1}]Command-Line Format --log-bin-use-v1-row-events[={0|1}]System Variable Name log_bin_use_v1_row_eventsVariable Scope Global Dynamic Variable No Permitted Values Type boolean Default 0MySQL 5.7 uses Version 2 binary log row events, which cannot be read by MySQL Server releases prior to MySQL 5.6.6. Setting this option to 1 causes mysqld to write the binary log using Version 1 logging events, which is the only version of binary log events used in previous releases, and thus produce binary logs that can be read by older slaves. Setting
--log-bin-use-v1-row-eventsto 0 (the default) causes mysqld to use Version 2 binary log events.The value used for this option can be obtained from the read-only
log_bin_use_v1_row_eventssystem variable.--log-bin-use-v1-row-eventsis chiefly of interest when setting up replication conflict detection and resolution usingNDB$EPOCH_TRANS()as the conflict detection function, which requires Version 2 binary log row events. Thus, this option and--ndb-log-transaction-idare not compatible.For more information, see Section 21.6.11, “NDB Cluster Replication Conflict Resolution”.
Statement selection options. The options in the following list affect which statements are written to the binary log, and thus sent by a replication master server to its slaves. There are also options for slave servers that control which statements received from the master should be executed or ignored. For details, see Section 16.1.6.3, “Replication Slave Options and Variables”.
-
Command-Line Format --binlog-do-db=namePermitted Values Type string This option affects binary logging in a manner similar to the way that
--replicate-do-dbaffects replication.The effects of this option depend on whether the statement-based or row-based logging format is in use, in the same way that the effects of
--replicate-do-dbdepend on whether statement-based or row-based replication is in use. You should keep in mind that the format used to log a given statement may not necessarily be the same as that indicated by the value ofbinlog_format. For example, DDL statements such asCREATE TABLEandALTER TABLEare always logged as statements, without regard to the logging format in effect, so the following statement-based rules for--binlog-do-dbalways apply in determining whether or not the statement is logged.Statement-based logging. Only those statements are written to the binary log where the default database (that is, the one selected by
USE) isdb_name. To specify more than one database, use this option multiple times, once for each database; however, doing so does not cause cross-database statements such asUPDATEto be logged while a different database (or no database) is selected.some_db.some_tableSET foo='bar'WarningTo specify multiple databases you must use multiple instances of this option. Because database names can contain commas, the list will be treated as the name of a single database if you supply a comma-separated list.
An example of what does not work as you might expect when using statement-based logging: If the server is started with
--binlog-do-db=salesand you issue the following statements, theUPDATEstatement is not logged:USE prices; UPDATE sales.january SET amount=amount+1000;The main reason for this “just check the default database” behavior is that it is difficult from the statement alone to know whether it should be replicated (for example, if you are using multiple-table
DELETEstatements or multiple-tableUPDATEstatements that act across multiple databases). It is also faster to check only the default database rather than all databases if there is no need.Another case which may not be self-evident occurs when a given database is replicated even though it was not specified when setting the option. If the server is started with
--binlog-do-db=sales, the followingUPDATEstatement is logged even thoughpriceswas not included when setting--binlog-do-db:USE sales; UPDATE prices.discounts SET percentage = percentage + 10;Because
salesis the default database when theUPDATEstatement is issued, theUPDATEis logged.Row-based logging. Logging is restricted to database
db_name. Only changes to tables belonging todb_nameare logged; the default database has no effect on this. Suppose that the server is started with--binlog-do-db=salesand row-based logging is in effect, and then the following statements are executed:USE prices; UPDATE sales.february SET amount=amount+100;The changes to the
februarytable in thesalesdatabase are logged in accordance with theUPDATEstatement; this occurs whether or not theUSEstatement was issued. However, when using the row-based logging format and--binlog-do-db=sales, changes made by the followingUPDATEare not logged:USE prices; UPDATE prices.march SET amount=amount-25;Even if the
USE pricesstatement were changed toUSE sales, theUPDATEstatement's effects would still not be written to the binary log.Another important difference in
--binlog-do-dbhandling for statement-based logging as opposed to the row-based logging occurs with regard to statements that refer to multiple databases. Suppose that the server is started with--binlog-do-db=db1, and the following statements are executed:USE db1; UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;If you are using statement-based logging, the updates to both tables are written to the binary log. However, when using the row-based format, only the changes to
table1are logged;table2is in a different database, so it is not changed by theUPDATE. Now suppose that, instead of theUSE db1statement, aUSE db4statement had been used:USE db4; UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;In this case, the
UPDATEstatement is not written to the binary log when using statement-based logging. However, when using row-based logging, the change totable1is logged, but not that totable2—in other words, only changes to tables in the database named by--binlog-do-dbare logged, and the choice of default database has no effect on this behavior. -
Command-Line Format --binlog-ignore-db=namePermitted Values Type string This option affects binary logging in a manner similar to the way that
--replicate-ignore-dbaffects replication.The effects of this option depend on whether the statement-based or row-based logging format is in use, in the same way that the effects of
--replicate-ignore-dbdepend on whether statement-based or row-based replication is in use. You should keep in mind that the format used to log a given statement may not necessarily be the same as that indicated by the value ofbinlog_format. For example, DDL statements such asCREATE TABLEandALTER TABLEare always logged as statements, without regard to the logging format in effect, so the following statement-based rules for--binlog-ignore-dbalways apply in determining whether or not the statement is logged.Statement-based logging. Tells the server to not log any statement where the default database (that is, the one selected by
USE) isdb_name.Prior to MySQL 5.7.2, this option caused any statements containing fully qualified table names not to be logged if there was no default database specified (that is, when
SELECTDATABASE()returnedNULL). In MySQL 5.7.2 and later, when there is no default database, no--binlog-ignore-dboptions are applied, and such statements are always logged. (Bug #11829838, Bug #60188)Row-based format. Tells the server not to log updates to any tables in the database
db_name. The current database has no effect.When using statement-based logging, the following example does not work as you might expect. Suppose that the server is started with
--binlog-ignore-db=salesand you issue the following statements:USE prices; UPDATE sales.january SET amount=amount+1000;The
UPDATEstatement is logged in such a case because--binlog-ignore-dbapplies only to the default database (determined by theUSEstatement). Because thesalesdatabase was specified explicitly in the statement, the statement has not been filtered. However, when using row-based logging, theUPDATEstatement's effects are not written to the binary log, which means that no changes to thesales.januarytable are logged; in this instance,--binlog-ignore-db=salescauses all changes made to tables in the master's copy of thesalesdatabase to be ignored for purposes of binary logging.To specify more than one database to ignore, use this option multiple times, once for each database. Because database names can contain commas, the list will be treated as the name of a single database if you supply a comma-separated list.
You should not use this option if you are using cross-database updates and you do not want these updates to be logged.
Checksum options. MySQL 5.7 supports reading and writing of binary log checksums. These are enabled using the two options listed here:
--binlog-checksum={NONE|CRC32}Command-Line Format --binlog-checksum=typePermitted Values Type string Default CRC32Valid Values NONECRC32Enabling this option causes the master to write checksums for events written to the binary log. Set to
NONEto disable, or the name of the algorithm to be used for generating checksums; currently, only CRC32 checksums are supported, and CRC32 is the default.--master-verify-checksum={0|1}Command-Line Format --master-verify-checksum=namePermitted Values Type boolean Default OFFEnabling this option causes the master to verify events from the binary log using checksums, and to stop with an error in the event of a mismatch. Disabled by default.
To control reading of checksums by the slave (from the relay)
log, use the
--slave-sql-verify-checksum
option.
Testing and debugging options. The following binary log options are used in replication testing and debugging. They are not intended for use in normal operations.
-
Command-Line Format --max-binlog-dump-events=#Permitted Values Type integer Default 0This option is used internally by the MySQL test suite for replication testing and debugging.
-
Command-Line Format --sporadic-binlog-dump-failPermitted Values Type boolean Default FALSEThis option is used internally by the MySQL test suite for replication testing and debugging.
--binlog-rows-query-log-eventsCommand-Line Format --binlog-rows-query-log-eventsPermitted Values Type boolean Default FALSEThis option enables
binlog_rows_query_log_events.
The following list describes system variables for controlling
binary logging. They can be set at server startup and some of
them can be changed at runtime using
SET.
Server options used to control binary logging are listed earlier
in this section. For information about the
sql_log_bin and
sql_log_off variables, see
Section 5.1.5, “Server System Variables”.
-
Command-Line Format --binlog-cache-size=#System Variable Name binlog_cache_sizeVariable Scope Global Dynamic Variable Yes Permitted Values (32-bit platforms) Type integer Default 32768Min Value 4096Max Value 4294967295Permitted Values (64-bit platforms) Type integer Default 32768Min Value 4096Max Value 18446744073709551615The size of the cache to hold changes to the binary log during a transaction. A binary log cache is allocated for each client if the server supports any transactional storage engines and if the server has the binary log enabled (
--log-binoption). If you often use large transactions, you can increase this cache size to get better performance. TheBinlog_cache_useandBinlog_cache_disk_usestatus variables can be useful for tuning the size of this variable. See Section 5.4.4, “The Binary Log”.binlog_cache_sizesets the size for the transaction cache only; the size of the statement cache is governed by thebinlog_stmt_cache_sizesystem variable. -
System Variable Name binlog_checksumVariable Scope Global Dynamic Variable Yes Permitted Values Type string Default CRC32Valid Values NONECRC32When enabled, this variable causes the master to write a checksum for each event in the binary log.
binlog_checksumsupports the valuesNONE(disabled) andCRC32. The default isCRC32.When
binlog_checksumis disabled (valueNONE), the server verifies that it is writing only complete events to the binary log by writing and checking the event length (rather than a checksum) for each event.Changing the value of this variable causes the binary log to be rotated; checksums are always written to an entire binary log file, and never to only part of one.
Setting this variable on the master to a value unrecognized by the slave causes the slave to set its own
binlog_checksumvalue toNONE, and to stop replication with an error. (Bug #13553750, Bug #61096) If backward compatibility with older slaves is a concern, you may want to set the value explicitly toNONE. binlog_direct_non_transactional_updatesCommand-Line Format --binlog-direct-non-transactional-updates[=value]System Variable Name binlog_direct_non_transactional_updatesVariable Scope Global, Session Dynamic Variable Yes Permitted Values Type boolean Default OFFDue to concurrency issues, a slave can become inconsistent when a transaction contains updates to both transactional and nontransactional tables. MySQL tries to preserve causality among these statements by writing nontransactional statements to the transaction cache, which is flushed upon commit. However, problems arise when modifications done to nontransactional tables on behalf of a transaction become immediately visible to other connections because these changes may not be written immediately into the binary log.
The
binlog_direct_non_transactional_updatesvariable offers one possible workaround to this issue. By default, this variable is disabled. Enablingbinlog_direct_non_transactional_updatescauses updates to nontransactional tables to be written directly to the binary log, rather than to the transaction cache.binlog_direct_non_transactional_updatesworks only for statements that are replicated using the statement-based binary logging format; that is, it works only when the value ofbinlog_formatisSTATEMENT, or whenbinlog_formatisMIXEDand a given statement is being replicated using the statement-based format. This variable has no effect when the binary log format isROW, or whenbinlog_formatis set toMIXEDand a given statement is replicated using the row-based format.ImportantBefore enabling this variable, you must make certain that there are no dependencies between transactional and nontransactional tables; an example of such a dependency would be the statement
INSERT INTO myisam_table SELECT * FROM innodb_table. Otherwise, such statements are likely to cause the slave to diverge from the master.In MySQL 5.7, this variable has no effect when the binary log format is
ROWorMIXED. (Bug #51291)-
Introduced 5.7.6 Command-Line Format --binlog-error-action[=value]System Variable Name binlog_error_actionVariable Scope Global, Session Dynamic Variable Yes Permitted Values Type enumeration Default IGNORE_ERRORValid Values IGNORE_ERRORABORT_SERVERPermitted Values (>= 5.7.7) Type enumeration Default ABORT_SERVERValid Values IGNORE_ERRORABORT_SERVERControls what happens when the server encounters an error such as not being able to write to, flush or synchronize the binary log, which can cause the master's log to become inconsistent and replication slaves to lose synchronization.
In MySQL 5.7.7 and later, this variable defaults to
ABORT_SERVER, which makes the server halt logging and shut down whenever it encounters such an error with the binary log. Upon server restart, all of the previously prepared and binary logged transactions are committed, while any transactions which were prepared but not binary logged due to the error are aborted.When
binlog_error_actionis set toIGNORE_ERROR, if the server encounters such an error it continues the ongoing transaction, logs the error then halts logging, and continues performing updates. To resume binary logginglog_binmust be enabled again. This provides backward compatibility with older versions of MySQL.In previous releases this variable was named
binlogging_impossible_mode. -
Command-Line Format --binlog-format=formatSystem Variable Name binlog_formatVariable Scope Global, Session Dynamic Variable Yes Permitted Values (<= 5.7.6) Type enumeration Default STATEMENTValid Values ROWSTATEMENTMIXEDPermitted Values (>= 5.7.7) Type enumeration Default ROWValid Values ROWSTATEMENTMIXEDThis variable sets the binary logging format, and can be any one of
STATEMENT,ROW, orMIXED. See Section 16.2.1, “Replication Formats”.binlog_formatis set by the--binlog-formatoption at startup, or by thebinlog_formatvariable at runtime.NoteWhile you can change the logging format at runtime, it is not recommended that you change it while replication is ongoing. This is due in part to the fact that slaves do not honor the master's
binlog_formatsetting; a given MySQL Server can change only its own logging format.Prior to MySQL 5.7.7, the default format was
STATEMENT. In MySQL 5.7.7 and later the default isROW. Exception: In NDB Cluster, the default isMIXED; statement-based replication is not supported for NDB Cluster.You must have the
SUPERprivilege to set either the global or sessionbinlog_formatvalue.The rules governing when changes to this variable take effect and how long the effect lasts are the same as for other MySQL server system variables. For more information, see Section 13.7.4.1, “SET Syntax for Variable Assignment”.
When
MIXEDis specified, statement-based replication is used, except for cases where only row-based replication is guaranteed to lead to proper results. For example, this happens when statements contain user-defined functions (UDF) or theUUID()function. An exception to this rule is thatMIXEDalways uses statement-based replication for stored functions and triggers.There are exceptions when you cannot switch the replication format at runtime:
From within a stored function or a trigger.
If the session is currently in row-based replication mode and has open temporary tables.
From within a transaction.
Trying to switch the format in those cases results in an error.
The binary log format affects the behavior of the following server options:
These effects are discussed in detail in the descriptions of the individual options.
binlog_group_commit_sync_delayIntroduced 5.7.5 Command-Line Format --binlog-group-commit-sync-delay=#System Variable Name binlog_group_commit_sync_delayVariable Scope Global Dynamic Variable Yes Permitted Values Type integer Default 0Min Value 0Max Value 1000000Controls how many microseconds the binary log commit waits before synchronizing the binary log file to disk. By default
binlog-group-commit-sync-delayis set to 0, meaning that there is no delay. Settingbinlog-group-commit-sync-delayto a microsecond delay enables more transactions to be synchronized together to disk at once, reducing the overall time to commit a group of transactions because the larger groups require fewer time units per group. With the correct tuning, this can increase slave performance without compromising the master's throughput.binlog_group_commit_sync_no_delay_countIntroduced 5.7.5 Command-Line Format --binlog-group-commit-sync-no-delay-count=#System Variable Name binlog_group_commit_sync_no_delay_countVariable Scope Global Dynamic Variable Yes Permitted Values Type integer Default 0Min Value 0Max Value 1000000The maximum number of transactions to wait for before aborting the current delay as specified by
binlog-group-commit-sync-delay. Ifbinlog-group-commit-sync-delayis set to 0, then this option has no effect.-
Introduced 5.7.5 Deprecated 5.7.6 Command-Line Format --binlogging-impossible-mode[=value]System Variable Name binlogging_impossible_modeVariable Scope Global, Session Dynamic Variable Yes Permitted Values Type enumeration Default IGNORE_ERRORValid Values IGNORE_ERRORABORT_SERVERThis option is deprecated and will be removed in a future MySQL release. Use the renamed
binlog_error_actionto control what happens when the server cannot write to the binary log. -
Deprecated 5.7.9 System Variable Name binlog_max_flush_queue_timeVariable Scope Global Dynamic Variable Yes Permitted Values Type integer Default 0Min Value 0Max Value 100000Formerly, this controlled the time in microseconds to continue reading transactions from the flush queue before proceeding with group commit. In MySQL 5.7, this variable no longer has any effect.
binlog_max_flush_queue_timeis deprecated as of MySQL 5.7.9, and is marked for eventual removal in a future MySQL release. -
System Variable Name binlog_order_commitsVariable Scope Global Dynamic Variable Yes Permitted Values Type boolean Default ONWhen this variable is enabled on a master (the default), transactions are externalized in the same order as they are written to the binary log. If disabled, transactions may be committed in parallel. In some cases, disabling this variable might produce a performance increment.
-
Command-Line Format --binlog-row-image=image_typeSystem Variable Name binlog_row_image=image_typeVariable Scope Global, Session Dynamic Variable Yes Permitted Values Type enumeration Default fullValid Values full(Log all columns)minimal(Log only changed columns, and columns needed to identify rows)noblob(Log all columns, except for unneeded BLOB and TEXT columns)For MySQL row-based replication, this variable determines how row images are written to the binary log.
In MySQL row-based replication, each row change event contains two images, a “before” image whose columns are matched against when searching for the row to be updated, and an “after” image containing the changes. Normally, MySQL logs full rows (that is, all columns) for both the before and after images. However, it is not strictly necessary to include every column in both images, and we can often save disk, memory, and network usage by logging only those columns which are actually required.
NoteWhen deleting a row, only the before image is logged, since there are no changed values to propagate following the deletion. When inserting a row, only the after image is logged, since there is no existing row to be matched. Only when updating a row are both the before and after images required, and both written to the binary log.
For the before image, it is necessary only that the minimum set of columns required to uniquely identify rows is logged. If the table containing the row has a primary key, then only the primary key column or columns are written to the binary log. Otherwise, if the table has a unique key all of whose columns are
NOT NULL, then only the columns in the unique key need be logged. (If the table has neither a primary key nor a unique key without anyNULLcolumns, then all columns must be used in the before image, and logged.) In the after image, it is necessary to log only the columns which have actually changed.You can cause the server to log full or minimal rows using the
binlog_row_imagesystem variable. This variable actually takes one of three possible values, as shown in the following list:full: Log all columns in both the before image and the after image.minimal: Log only those columns in the before image that are required to identify the row to be changed; log only those columns in the after image that are actually changed.noblob: Log all columns (same asfull), except forBLOBandTEXTcolumns that are not required to identify rows, or that have not changed.
NoteThis variable is not supported by NDB Cluster; setting it has no effect on the logging of
NDBtables.The default value is
full.In MySQL 5.5 and earlier, full row images are always used for both before images and after images. If you need to replicate from a newer master to a slave running MySQL 5.5 or earlier, the master should always use this value.
When using
minimalornoblob, deletes and updates are guaranteed to work correctly for a given table if and only if the following conditions are true for both the source and destination tables:All columns must be present and in the same order; each column must use the same data type as its counterpart in the other table.
The tables must have identical primary key definitions.
(In other words, the tables must be identical with the possible exception of indexes that are not part of the tables' primary keys.)
If these conditions are not met, it is possible that the primary key column values in the destination table may prove insufficient to provide a unique match for a delete or update. In this event, no warning or error is issued; the master and slave silently diverge, thus breaking consistency.
Setting this variable has no effect when the binary logging format is
STATEMENT. Whenbinlog_formatisMIXED, the setting forbinlog_row_imageis applied to changes that are logged using row-based format, but this setting no effect on changes logged as statements.Setting
binlog_row_imageon either the global or session level does not cause an implicit commit; this means that this variable can be changed while a transaction is in progress without affecting the transaction. -
System Variable Name binlog_rows_query_log_eventsVariable Scope Global, Session Dynamic Variable Yes Permitted Values Type boolean Default FALSEThe
binlog_rows_query_log_eventssystem variable affects row-based logging only. When enabled, it causes the MySQL Server to write informational log events such as row query log events into its binary log. This information can be used for debugging and related purposes; such as obtaining the original query issued on the master when it cannot be reconstructed from the row updates.These events are normally ignored by MySQL programs reading the binary log and so cause no issues when replicating or restoring from backup. To view them, increase the verbosity level by using mysqlbinlog's
--verboseoption twice, either as-vvor--verbose --verbose. -
Command-Line Format --binlog-stmt-cache-size=#System Variable Name binlog_stmt_cache_sizeVariable Scope Global Dynamic Variable Yes Permitted Values (32-bit platforms) Type integer Default 32768Min Value 4096Max Value 4294967295Permitted Values (64-bit platforms) Type integer Default 32768Min Value 4096Max Value 18446744073709551615This variable determines the size of the cache for the binary log to hold nontransactional statements issued during a transaction. Separate binary log transaction and statement caches are allocated for each client if the server supports any transactional storage engines and if the server has the binary log enabled (
--log-binoption). If you often use large nontransactional statements during transactions, you can increase this cache size to get better performance. TheBinlog_stmt_cache_useandBinlog_stmt_cache_disk_usestatus variables can be useful for tuning the size of this variable. See Section 5.4.4, “The Binary Log”.The
binlog_cache_sizesystem variable sets the size for the transaction cache. -
System Variable Name log_binVariable Scope Global Dynamic Variable No Whether the binary log is enabled. If the
--log-binoption is used, then the value of this variable isON; otherwise it isOFF. This variable reports only on the status of binary logging (enabled or disabled); it does not actually report the value to which--log-binis set. -
System Variable Name log_bin_basenameVariable Scope Global Dynamic Variable No Permitted Values Type file name Default datadir + '/' + hostname + '-bin'Holds the name and complete path to the binary log file. Unlike the
log_binsystem variable,log_bin_basenamereflects the name set with the--log-binserver option. -
System Variable Name log_bin_indexVariable Scope Global Dynamic Variable No Permitted Values Type file name The index file for binary log file names.
-
Command-Line Format --log-bin-use-v1-row-events[={0|1}]System Variable Name log_bin_use_v1_row_eventsVariable Scope Global Dynamic Variable No Permitted Values Type boolean Default 0Shows whether Version 2 binary logging is in use. A value of 1 shows that the server is writing the binary log using Version 1 logging events (the only version of binary log events used in previous releases), and thus producing a binary log that can be read by older slaves. 0 indicates that Version 2 binary log events are in use.
This variable is read-only. To switch between Version 1 and Version 2 binary event binary logging, it is necessary to restart mysqld with the
--log-bin-use-v1-row-eventsoption.Other than when performing upgrades of NDB Cluster Replication,
--log-bin-use-v1-eventsis chiefly of interest when setting up replication conflict detection and resolution usingNDB$EPOCH_TRANS(), which requires Version 2 binary row event logging. Thus, this option and--ndb-log-transaction-idare not compatible.NoteMySQL NDB Cluster 7.5 uses Version 2 binary log row events by default. You should keep this mind when planning upgrades or downgrades, and for setups using NDB Cluster Replication.
For more information, see Section 21.6.11, “NDB Cluster Replication Conflict Resolution”.
-
Command-Line Format --log-slave-updatesSystem Variable Name log_slave_updatesVariable Scope Global Dynamic Variable No Permitted Values Type boolean Default FALSEWhether updates received by a slave server from a master server should be logged to the slave's own binary log. Binary logging must be enabled on the slave for this variable to have any effect. See Section 16.1.6, “Replication and Binary Logging Options and Variables”.
log_statements_unsafe_for_binlogIntroduced 5.7.11 System Variable Name log_statements_unsafe_for_binlogVariable Scope Global Dynamic Variable Yes Permitted Values Type boolean Default ONIf error 1592 is encountered, controls whether the generated warnings are added to the error log or not.
-
System Variable Name master_verify_checksumVariable Scope Global Dynamic Variable Yes Permitted Values Type boolean Default OFFEnabling this variable causes the master to examine checksums when reading from the binary log.
master_verify_checksumis disabled by default; in this case, the master uses the event length from the binary log to verify events, so that only complete events are read from the binary log. -
Command-Line Format --max-binlog-cache-size=#System Variable Name max_binlog_cache_sizeVariable Scope Global Dynamic Variable Yes Permitted Values Type integer Default 18446744073709551615Min Value 4096Max Value 18446744073709551615If a transaction requires more than this many bytes of memory, the server generates a Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage error. The minimum value is 4096. The maximum possible value is 16EB (exabytes). The maximum recommended value is 4GB; this is due to the fact that MySQL currently cannot work with binary log positions greater than 4GB.
max_binlog_cache_sizesets the size for the transaction cache only; the upper limit for the statement cache is governed by themax_binlog_stmt_cache_sizesystem variable.In MySQL 5.7, the visibility to sessions of
max_binlog_cache_sizematches that of thebinlog_cache_sizesystem variable; in other words, changing its value effects only new sessions that are started after the value is changed. -
Command-Line Format --max-binlog-size=#System Variable Name max_binlog_sizeVariable Scope Global Dynamic Variable Yes Permitted Values Type integer Default 1073741824Min Value 4096Max Value 1073741824If a write to the binary log causes the current log file size to exceed the value of this variable, the server rotates the binary logs (closes the current file and opens the next one). The minimum value is 4096 bytes. The maximum and default value is 1GB.
A transaction is written in one chunk to the binary log, so it is never split between several binary logs. Therefore, if you have big transactions, you might see binary log files larger than
max_binlog_size.If
max_relay_log_sizeis 0, the value ofmax_binlog_sizeapplies to relay logs as well. -
Command-Line Format --max-binlog-stmt-cache-size=#System Variable Name max_binlog_stmt_cache_sizeVariable Scope Global Dynamic Variable Yes Permitted Values Type integer Default 18446744073709547520Min Value 4096Max Value 18446744073709547520If nontransactional statements within a transaction require more than this many bytes of memory, the server generates an error. The minimum value is 4096. The maximum and default values are 4GB on 32-bit platforms and 16EB (exabytes) on 64-bit platforms.
max_binlog_stmt_cache_sizesets the size for the statement cache only; the upper limit for the transaction cache is governed exclusively by themax_binlog_cache_sizesystem variable. -
Command-Line Format --sync-binlog=#System Variable Name sync_binlogVariable Scope Global Dynamic Variable Yes Permitted Values (>= 5.7.7) Type integer Default 1Min Value 0Max Value 4294967295Permitted Values (32-bit platforms) Type integer Default 0Min Value 0Max Value 4294967295Permitted Values (64-bit platforms) Type integer Default 0Min Value 0Max Value 4294967295Controls the number of binary log commit groups to collect before synchronizing the binary log to disk. When
sync_binlog=0, the binary log is never synchronized to disk, and whensync_binlogis set to a value greater than 0 this number of binary log commit groups is periodically synchronized to disk. Whensync_binlog=1, all transactions are synchronized to the binary log before they are committed. Therefore, even in the event of an unexpected restart, any transactions that are missing from the binary log are only in prepared state. This causes the server's automatic recovery routine to roll back those transactions. This guarantees that no transaction is lost from the binary log, and is the safest option. However this can have a negative impact on performance because of an increased number of disk writes. Using a higher value improves performance, but with the increased risk of data loss.When
sync_binlog=0orsync_binlogis greater than 1, transactions are committed without having been synchronized to disk. Therefore, in the event of a power failure or operating system crash, it is possible that the server has committed some transactions that have not been synchronized to the binary log. Therefore it is impossible for the recovery routine to recover these transactions and they will be lost from the binary log.Prior to MySQL 5.7.7, the default value of
sync_binlogwas 0, which configures no synchronizing to disk—in this case, the server relies on the operating system to flush the binary log's contents from time to time as for any other file. MySQL 5.7.7 and later use a default value of 1, which is the safest choice, but as noted above can impact performance.