Spec-Zone .ru
спецификации, руководства, описания, API
|
This section describes the server options and system variables that apply to slave replication servers. You can
specify the options either on the command line or in
an option file. Many
of the options can be set while the server is running by using the CHANGE MASTER TO
statement. You can specify system variable values using SET
.
Server ID. On the master and each slave, you must use the server-id
option to establish a unique replication ID in the range from 1 to
232 – 1. "Unique" means that each ID must be
different from every other ID in use by any other replication master or slave. Example my.cnf
file:
[mysqld]server-id=3
Startup options for replication slaves. The following list
describes startup options for controlling replication slave servers. Many of these options can be set while the
server is running by using the CHANGE MASTER
TO
statement. Others, such as the --replicate-*
options, can be set
only when the slave server starts. Replication-related system variables are discussed later in this section.
Command-Line Format | --abort-slave-event-count=# |
||
Option-File Format | abort-slave-event-count |
||
Permitted Values | |||
Type | numeric |
||
Default | 0 |
||
Min Value | 0 |
When this option is set to some positive integer value
other than 0 (the default) it affects replication behavior as follows: After the slave SQL thread
has started, value
log events are permitted to be
executed; after that, the slave SQL thread does not receive any more events, just as if the network
connection from the master were cut. The slave thread continues to run, and the output from SHOW SLAVE
STATUS
displays Yes
in both the Slave_IO_Running
and the Slave_SQL_Running
columns, but no further events are read from
the relay log.
This option is used internally by the MySQL test suite for replication testing and debugging. It is not intended for use in a production setting.
--disconnect-slave-event-count
Command-Line Format | --disconnect-slave-event-count=# |
||
Option-File Format | disconnect-slave-event-count |
||
Permitted Values | |||
Type | numeric |
||
Default | 0 |
This option is used internally by the MySQL test suite for replication testing and debugging.
Command-Line Format | --log-slave-updates |
||
Option-File Format | log-slave-updates |
||
System Variable Name | log_slave_updates
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | boolean |
||
Default | FALSE |
Normally, a slave does not log to its own binary log any updates that are received from a master
server. This option tells the slave to log the updates performed by its SQL thread to its own binary
log. For this option to have any effect, the slave must also be started with the --log-bin
option to enable binary logging. Prior to MySQL 5.5, the
server would not start when using the --log-slave-updates
option without also starting the server with
the --log-bin
option, and would fail with an error; in MySQL 5.6, only
a warning is generated. (Bug #44663) --log-slave-updates
is used when you want to chain replication
servers. For example, you might want to set up replication servers using this arrangement:
A -> B -> C
Here, A
serves as the master for the slave B
, and B
serves as the master for the slave
C
. For this to work, B
must be both a
master and a slave. You must start both A
and B
with --log-bin
to enable binary logging, and B
with the --log-slave-updates
option so that updates received from A
are logged by B
to its binary log.
Removed | 5.6.11 | ||
Command-Line Format | --log-slow-slave-statements |
through 5.6.10 | |
Option-File Format | log-slow-slave-statements |
||
Permitted Values | |||
Type | boolean |
||
Default | OFF |
When the slow query log is enabled, this option enables logging for queries that have taken more
than long_query_time
seconds to execute on the slave.
This command-line option was removed in MySQL 5.6.11 and replaced by the log_slow_slave_statements
system variable. The system variable can be
set on the command line or in option files the same way as the option, so there is no need for any
changes at server startup, but the system variable also makes it possible to examine or set the
value at runtime.
Command-Line Format | --log-warnings[=#] |
||
-W [#] |
|||
Option-File Format | log-warnings |
||
System Variable Name | log_warnings
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Disabled by | skip-log-warnings |
||
Permitted Values | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 1 |
||
Range | 0 .. 4294967295 |
||
Permitted Values | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 1 |
||
Range | 0 .. 18446744073709547520 |
This option causes a server to print more messages to the error log about what it is doing. With
respect to replication, the server generates warnings that it succeeded in reconnecting after a
network/connection failure, and informs you as to how each slave thread started. This option is
enabled by default; to disable it, use --skip-log-warnings
. If the value is greater than 1, aborted
connections are written to the error log, and access-denied errors for new connection attempts are
written. See Section C.5.2.11,
"Communication Errors and Aborted Connections".
Note that the effects of this option are not limited to replication. It produces warnings across a spectrum of server activities.
Command-Line Format | --master-info-file=file_name |
||
Option-File Format | master-info-file |
||
Permitted Values | |||
Type | file name |
||
Default | master.info |
The name to use for the file in which the slave records information about the master. The default
name is master.info
in the data directory. For information about the
format of this file, see Section 16.2.2.2, "Slave Status
Logs".
Deprecated | 5.6.1 | ||
Command-Line Format | --master-retry-count=# |
||
Option-File Format | master-retry-count |
||
Permitted Values | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 86400 |
||
Range | 0 .. 4294967295 |
||
Permitted Values | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 86400 |
||
Range | 0 .. 18446744073709551615 |
The number of times that the slave tries to connect to the master before giving up. Reconnects are
attempted at intervals set by the MASTER_CONNECT_RETRY
option of the CHANGE MASTER TO
statement (default 60). Reconnects are triggered when data reads by the slave time out according to
the --slave-net-timeout
option. The default value is 86400. A value of 0 means "infinite";
the slave attempts to connect forever.
This option is deprecated as of MySQL 5.6.1 and will be removed in a future MySQL release.
Applications should be updated to use the MASTER_RETRY_COUNT
option of
the CHANGE MASTER TO
statement instead.
Command-Line Format | --max_relay_log_size=# |
||
Option-File Format | max_relay_log_size |
||
System Variable Name | max_relay_log_size
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 1073741824 |
The size at which the server rotates relay log files automatically. For more information, see Section 16.2.2, "Replication Relay and Status Logs". The default size is 1GB.
Command-Line Format | --read-only |
||
Option-File Format | read_only |
||
System Variable Name | read_only
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | false |
Cause the slave to permit no updates except from slave threads or from users having the SUPER
privilege.
On a slave server, this can be useful to ensure that the slave accepts updates only from its master
server and not from clients. This variable does not apply to TEMPORARY
tables.
Command-Line Format | --relay-log=name |
||
Option-File Format | relay-log |
||
System Variable Name | relay_log
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | file name |
The basename for the relay log. The default basename is
. The server writes the file in
the data directory unless the basename is given with a leading absolute path name to specify a
different directory. The server creates relay log files in sequence by adding a numeric suffix to
the basename. host_name
-relay-bin
Due to the manner in which MySQL parses server options, if you specify this option, you must supply
a value; the default basename is used only if the option is not actually
specified. If you use the --relay-log
option without specifying a value, unexpected behavior
is likely to result; this behavior depends on the other options used, the order in which they are
specified, and whether they are specified on the command line or in an option file. For more
information about how MySQL handles server options, see Section
4.2.3, "Specifying Program Options".
If you specify this option, the value specified is also used as the basename for the relay log index
file. You can override this behavior by specifying a different relay log index file basename using
the --relay-log-index
option.
Starting with MySQL 5.6.5, when the server reads an entry from the index file, it checks whether the
entry contains a relative path. If it does, the relative part of the path in replaced with the
absolute path set using the --relay-log
option. 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. Prior to MySQL 5.6.5, manual intervention was required whenever relocating the binary log or
relay log files. (Bug #11745230, Bug #12133)
You may find the --relay-log
option useful in performing the following tasks:
Creating relay logs whose names are independent of host names.
If you need to put the relay logs in some area other than the data
directory because your relay logs tend to be very large and you do not want to decrease max_relay_log_size
.
To increase speed by using load-balancing between disks.
Beginning with MySQL 5.6.2, you can obtain the relay log filename (and path) from the relay_log_basename
system variable.
Command-Line Format | --relay-log-index=name |
||
Option-File Format | relay-log-index |
||
System Variable Name | relay_log_index
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | file name |
The name to use for the relay log index file. The default name is
in the data directory,
where host_name
-relay-bin.indexhost_name
is the name of the slave server.
Due to the manner in which MySQL parses server options, if you specify this option, you must supply
a value; the default basename is used only if the option is not actually
specified. If you use the --relay-log-index
option without specifying a value, unexpected
behavior is likely to result; this behavior depends on the other options used, the order in which
they are specified, and whether they are specified on the command line or in an option file. For
more information about how MySQL handles server options, see Section
4.2.3, "Specifying Program Options".
If you specify this option, the value specified is also used as the basename for the relay logs. You
can override this behavior by specifying a different relay log file basename using the --relay-log
option.
--relay-log-info-file=
file_name
Command-Line Format | --relay-log-info-file=file_name |
||
Option-File Format | relay-log-info-file |
||
Permitted Values | |||
Type | file name |
||
Default | relay-log.info |
The name to use for the file in which the slave records information about the relay logs. The
default name is relay-log.info
in the data directory. For information
about the format of this file, see Section 16.2.2.2, "Slave
Status Logs".
Command-Line Format | --relay_log_purge |
||
Option-File Format | relay_log_purge |
||
System Variable Name | relay_log_purge
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | TRUE |
Disable or enable automatic purging of relay logs as soon as they are no longer needed. The default
value is 1 (enabled). This is a global variable that can be changed dynamically with SET GLOBAL relay_log_purge =
. N
Command-Line Format | --relay-log-recovery |
||
Option-File Format | relay-log-recovery |
||
Permitted Values | |||
Type | boolean |
||
Default | FALSE |
Enables automatic relay log recovery immediately following server startup, which means that the replication slave discards all unprocessed relay logs and retrieves them from the replication master. This should be used following a crash on the replication slave to ensure that no possibly corrupted relay logs are processed. The default value is 0 (disabled). This option must be enabled in order to provide a crash-proof slave.
Prior to MySQL 5.6.6, if this option is enabled for a multi-threaded slave, and the slave fails with
errors, you cannot execute CHANGE
MASTER TO
on that slave. In MySQL 5.6.6 or later, you can use START SLAVE UNTIL SQL_AFTER_MTS_GAPS
to ensure that any gaps in
the relay log are processed; after running this statement, you can then use CHANGE
MASTER TO
to fail this slave over to a new master. (Bug #13893363)
Command-Line Format | --relay_log_space_limit=# |
||
Option-File Format | relay_log_space_limit |
||
System Variable Name | relay_log_space_limit
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 4294967295 |
||
Permitted Values | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 18446744073709547520 |
This option places an upper limit on the total size in bytes of all relay logs on the slave. A value
of 0 means "no limit." This is useful
for a slave server host that has limited disk space. When the limit is reached, the I/O thread stops
reading binary log events from the master server until the SQL thread has caught up and deleted some
unused relay logs. Note that this limit is not absolute: There are cases where the SQL thread needs
more events before it can delete relay logs. In that case, the I/O thread exceeds the limit until it
becomes possible for the SQL thread to delete some relay logs because not doing so would cause a
deadlock. You should not set --relay-log-space-limit
to less than twice the value of --max-relay-log-size
(or --max-binlog-size
if --max-relay-log-size
is 0). In that case, there is a chance that the I/O thread waits for free space because --relay-log-space-limit
is exceeded, but the SQL thread has no
relay log to purge and is unable to satisfy the I/O thread. This forces the I/O thread to ignore --relay-log-space-limit
temporarily.
Command-Line Format | --replicate-do-db=name |
||
Option-File Format | replicate-do-db |
||
Permitted Values | |||
Type | string |
The effects of this option depend on whether statement-based or row-based replication is in use.
Statement-based replication. Tell the slave SQL thread to restrict replication to statements
where the default database (that is, the one selected by USE
) is db_name
. To
specify more than one database, use this option multiple times, once for each database; however,
doing so does not replicate cross-database statements such as
UPDATE
while a different database (or no database) is selected.some_db.some_table
SET
foo='bar'
To specify multiple databases you must use multiple instances of this option. Because database names can contain commas, if you supply a comma separated list then the list will be treated as the name of a single database.
An example of what does not work as you might expect when using statement-based replication: If the
slave is started with --replicate-do-db=sales
and you issue the following statements on
the master, the UPDATE
statement is not
replicated:
USE prices;UPDATE sales.january SET amount=amount+1000;
The main reason for this "check just 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 DELETE
statements or multiple-table UPDATE
statements that act across multiple databases). It is also
faster to check only the default database rather than all databases if there is no need.
Row-based replication. Tells the slave SQL thread to restrict replication to database db_name
. Only tables belonging to db_name
are changed; the current database has no effect on this. Suppose that the slave is started with --replicate-do-db=sales
and row-based replication is in effect, and then the following statements are run on the master:
USE prices;UPDATE sales.february SET amount=amount+100;
The february
table in the sales
database
on the slave is changed in accordance with the UPDATE
statement; this occurs whether or not the USE
statement was issued. However, issuing the following
statements on the master has no effect on the slave when using row-based replication and --replicate-do-db=sales
:
USE prices;UPDATE prices.march SET amount=amount-25;
Even if the statement USE prices
were changed to USE
sales
, the UPDATE
statement's effects would still not be replicated.
Another important difference in how --replicate-do-db
is handled in statement-based replication as opposed
to row-based replication occurs with regard to statements that refer to multiple databases. Suppose
that the slave is started with --replicate-do-db=db1
, and the following statements are executed
on the master:
USE db1;UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;
If you are using statement-based replication, then both tables are updated on the slave. However,
when using row-based replication, only table1
is affected on the slave;
since table2
is in a different database, table2
on the slave is not changed by the UPDATE
. Now suppose that, instead of the USE
db1
statement, a USE db4
statement had been used:
USE db4;UPDATE db1.table1 SET col1 = 10, db2.table2 SET col2 = 20;
In this case, the UPDATE
statement would have no effect on the slave when using
statement-based replication. However, if you are using row-based replication, the UPDATE
would change table1
on the
slave, but not table2
—in other words, only tables in the database named
by --replicate-do-db
are changed, and the choice of default database has no effect on this behavior.
If you need cross-database updates to work, use --replicate-wild-do-table=
instead. See Section
16.2.3, "How Servers Evaluate Replication Filtering Rules".db_name
.%
This option affects replication in the same manner that --binlog-do-db
affects binary logging, and the effects of the
replication format on how --replicate-do-db
affects replication behavior are the same as
those of the logging format on the behavior of --binlog-do-db
.
This option has no effect on BEGIN
, COMMIT
, or ROLLBACK
statements.
Command-Line Format | --replicate-ignore-db=name |
||
Option-File Format | replicate-ignore-db |
||
Permitted Values | |||
Type | string |
As with --replicate-do-db
,
the effects of this option depend on whether statement-based or row-based replication is in use.
Statement-based replication. Tells the slave SQL thread not to replicate any statement where
the default database (that is, the one selected by USE
) is db_name
.
Row-based replication. Tells the slave SQL thread not to update any tables in the database
db_name
. The default database has no effect.
When using statement-based replication, the following example does not work as you might expect.
Suppose that the slave is started with --replicate-ignore-db=sales
and you issue the following statements
on the master:
USE prices;UPDATE sales.january SET amount=amount+1000;
The UPDATE
statement is replicated
in such a case because --replicate-ignore-db
applies only to the default database
(determined by the USE
statement). Because the sales
database was specified explicitly in the statement, the statement has not been filtered. However,
when using row-based replication, the UPDATE
statement's effects are not propagated to the slave, and the slave's copy of the
sales.january
table is unchanged; in this instance, --replicate-ignore-db=sales
causes all changes made to tables in the master's copy of the
sales
database to be ignored by the slave.
To specify more than one database to ignore, use this option multiple times, once for each database. Because database names can contain commas, if you supply a comma separated list then the list will be treated as the name of a single database.
You should not use this option if you are using cross-database updates and you do not want these updates to be replicated. See Section 16.2.3, "How Servers Evaluate Replication Filtering Rules".
If you need cross-database updates to work, use --replicate-wild-ignore-table=
instead. See Section 16.2.3,
"How Servers Evaluate Replication Filtering Rules".db_name
.%
This option affects replication in the same manner that --binlog-ignore-db
affects binary logging, and the effects of the
replication format on how --replicate-ignore-db
affects replication behavior are the
same as those of the logging format on the behavior of --binlog-ignore-db
.
This option has no effect on BEGIN
, COMMIT
, or ROLLBACK
statements.
--replicate-do-table=
db_name.tbl_name
Command-Line Format | --replicate-do-table=name |
||
Option-File Format | replicate-do-table |
||
Permitted Values | |||
Type | string |
Tells the slave SQL thread to restrict replication to the specified table. To specify more than one
table, use this option multiple times, once for each table. This works for both cross-database
updates and default database updates, in contrast to --replicate-do-db
. See Section
16.2.3, "How Servers Evaluate Replication Filtering Rules".
This option affects only statements that apply to tables. It does not affect statements that apply
only to other database objects, such as stored routines. To filter statements operating on stored
routines, use one or more of the --replicate-*-db
options.
--replicate-ignore-table=
db_name.tbl_name
Command-Line Format | --replicate-ignore-table=name |
||
Option-File Format | replicate-ignore-table |
||
Permitted Values | |||
Type | string |
Tells the slave SQL thread not to replicate any statement that updates the specified table, even if
any other tables might be updated by the same statement. To specify more than one table to ignore,
use this option multiple times, once for each table. This works for cross-database updates, in
contrast to --replicate-ignore-db
. See Section
16.2.3, "How Servers Evaluate Replication Filtering Rules".
This option affects only statements that apply to tables. It does not affect statements that apply
only to other database objects, such as stored routines. To filter statements operating on stored
routines, use one or more of the --replicate-*-db
options.
--replicate-rewrite-db=
from_name
->to_name
Command-Line Format | --replicate-rewrite-db=old_name->new_name
|
||
Option-File Format | replicate-rewrite-db |
||
Permitted Values | |||
Type | string |
Tells the slave to translate the default database (that is, the one selected by USE
) to to_name
if it was
from_name
on the master. Only statements involving tables
are affected (not statements such as CREATE DATABASE
, DROP DATABASE
, and ALTER DATABASE
), and only if from_name
is the default database on the master. This does not work for cross-database updates. To specify
multiple rewrites, use this option multiple times. The server uses the first one with a from_name
value that matches. The database name
translation is done before the --replicate-*
rules are tested.
If you use this option on the command line and the ">
" character is special to your command interpreter,
quote the option value. For example:
shell> mysqld --replicate-rewrite-db="olddb
->newdb
"
Prior to MySQL 5.6.7, multithreaded slaves did not honor this option correctly. (Bug #14232958)
Command-Line Format | --replicate-same-server-id |
||
Option-File Format | replicate-same-server-id |
||
Permitted Values | |||
Type | boolean |
||
Default | FALSE |
To be used on slave servers. Usually you should use the default setting of 0, to prevent infinite
loops caused by circular replication. If set to 1, the slave does not skip events having its own
server ID. Normally, this is useful only in rare configurations. Cannot be set to 1 if --log-slave-updates
is used. By default, the slave I/O thread does not write binary log events to the relay log if they
have the slave's server ID (this optimization helps save disk usage). If you want to use --replicate-same-server-id
, be sure to start the slave with this
option before you make the slave read its own events that you want the slave SQL thread to execute.
--replicate-wild-do-table=
db_name.tbl_name
Command-Line Format | --replicate-wild-do-table=name |
||
Option-File Format | replicate-wild-do-table |
||
Permitted Values | |||
Type | string |
Tells the slave thread to restrict replication to statements where any of the updated tables match
the specified database and table name patterns. Patterns can contain the "%
" and "_
" wildcard characters, which have
the same meaning as for the LIKE
pattern-matching operator. To specify more than one table,
use this option multiple times, once for each table. This works for cross-database updates. See Section 16.2.3, "How
Servers Evaluate Replication Filtering Rules".
This option applies to tables, views, and triggers. It does not apply to stored procedures and
functions, or events. To filter statements operating on the latter objects, use one or more of the
--replicate-*-db
options.
Example: --replicate-wild-do-table=foo%.bar%
replicates only updates that use a
table where the database name starts with foo
and the table name starts
with bar
.
If the table name pattern is %
, it matches any table name and the
option also applies to database-level statements (CREATE DATABASE
, DROP DATABASE
, and ALTER DATABASE
). For example, if you use --replicate-wild-do-table=foo%.%
, database-level statements are
replicated if the database name matches the pattern foo%
.
To include literal wildcard characters in the database or table name patterns, escape them with a
backslash. For example, to replicate all tables of a database that is named my_own%db
,
but not replicate tables from the my1ownAABCdb
database, you should
escape the "_
"
and "%
"
characters like this: --replicate-wild-do-table=my\_own\%db
. If you use the option on
the command line, you might need to double the backslashes or quote the option value, depending on
your command interpreter. For example, with the bash
shell, you would need to type --replicate-wild-do-table=my\\_own\\%db
.
--replicate-wild-ignore-table=
db_name.tbl_name
Command-Line Format | --replicate-wild-ignore-table=name |
||
Option-File Format | replicate-wild-ignore-table |
||
Permitted Values | |||
Type | string |
Tells the slave thread not to replicate a statement where any table matches the given wildcard pattern. To specify more than one table to ignore, use this option multiple times, once for each table. This works for cross-database updates. See Section 16.2.3, "How Servers Evaluate Replication Filtering Rules".
Example: --replicate-wild-ignore-table=foo%.bar%
does not replicate updates
that use a table where the database name starts with foo
and the table
name starts with bar
.
For information about how matching works, see the description of the --replicate-wild-do-table
option. The rules for including literal
wildcard characters in the option value are the same as for --replicate-wild-ignore-table
as well.
Command-Line Format | --report-host=host_name |
||
Option-File Format | report-host |
||
System Variable Name | report_host
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | string |
The host name or IP address of the slave to be reported to the master during slave registration.
This value appears in the output of SHOW SLAVE HOSTS
on the master server. Leave the value unset if
you do not want the slave to register itself with the master. Note that it is not sufficient for the
master to simply read the IP address of the slave from the TCP/IP socket after the slave connects.
Due to NAT and other routing issues, that IP may not be valid for connecting to the slave from the
master or other hosts.
Command-Line Format | --report-password=name |
||
Option-File Format | report-password |
||
System Variable Name | report_password
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | string |
The account password of the slave to be reported to the master during slave registration. This value
appears in the output of SHOW
SLAVE HOSTS
on the master server if the --show-slave-auth-info
option is given.
Although the name of this option might imply otherwise, --report-password
is not connected to the MySQL user privilege system and
so is not necessarily (or even likely to be) the same as the password for the MySQL replication user
account.
Command-Line Format | --report-port=# |
||
Option-File Format | report-port |
||
System Variable Name | report_port
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values (>= 5.6.5) | |||
Type | numeric |
||
Default | [slave_port] |
||
Range | 0 .. 65535 |
The TCP/IP port number for connecting to the slave, to be reported to the master during slave registration. Set this only if the slave is listening on a nondefault port or if you have a special tunnel from the master or other clients to the slave. If you are not sure, do not use this option.
Prior to MySQL 5.6.5, the default value for this option was 3306. In MySQL 5.6.5 and later, the
value shown is the port number actually used by the slave (Bug #13333431). This change also affects
the default value displayed by SHOW
SLAVE HOSTS
.
Command-Line Format | --report-user=name |
||
Option-File Format | report-user |
||
System Variable Name | report_user
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | string |
The account user name of the slave to be reported to the master during slave registration. This
value appears in the output of SHOW
SLAVE HOSTS
on the master server if the --show-slave-auth-info
option is given.
Although the name of this option might imply otherwise, --report-user
is
not connected to the MySQL user privilege system and so is not necessarily (or even likely to be)
the same as the name of the MySQL replication user account.
Command-Line Format | --show-slave-auth-info |
||
Option-File Format | show-slave-auth-info |
||
Permitted Values | |||
Type | boolean |
||
Default | FALSE |
Display slave user names and passwords in the output of SHOW SLAVE HOSTS
on the master server for slaves started with the --report-user
and --report-password
options.
Introduced | 5.6.3 | ||
Command-Line Format | --slave-checkpoint-group=# |
||
Option-File Format | slave-checkpoint-group |
||
Permitted Values | |||
Type | numeric |
||
Default | 512 |
||
Range | 32 .. 524280 |
||
Block Size | 8 |
Sets the maximum number of transactions that can be processed by a multi-threaded slave before a
checkpoint operation is called to update its status as shown by SHOW SLAVE STATUS
. Setting this option has no effect on slaves
for which multithreading is not enabled.
This option works in combination with the --slave-checkpoint-period
option in such a way that, when either limit
is exceeded, the checkpoint is executed and the counters tracking both the number of transactions
and the time elapsed since the last checkpoint are reset.
The minimum allowed value for this option is 32, unless the server was built using -DWITH_DEBUG
, in which case the minimum value is 1. The effective
value is always a multiple of 8; you can set it to a value that is not such a multiple, but the
server rounds it down to the next lower multiple of 8 before storing the value. (Exception: No such rounding is performed by the debug
server.) Regardless of how the server was built, the default value is 512, and the maximum allowed
value is 524280.
--slave-checkpoint-group
was added in MySQL 5.6.3.
Introduced | 5.6.3 | ||
Command-Line Format | --slave-checkpoint-period=# |
||
Option-File Format | slave-checkpoint-period |
||
Permitted Values | |||
Type | numeric |
||
Default | 300 |
||
Range | 1 .. 4G |
Sets the maximum time (in milliseconds) that is allowed to pass before a checkpoint operation is
called to update the status of a multi-threaded slave as shown by SHOW SLAVE STATUS
. Setting this option has no effect on slaves
for which multithreading is not enabled.
This option works in combination with the --slave-checkpoint-group
option in such a way that, when either limit
is exceeded, the checkpoint is executed and the counters tracking both the number of transactions
and the time elapsed since the last checkpoint are reset.
The minimum allowed value for this option is 1, unless the server was built using -DWITH_DEBUG
, in which case the minimum value is 0. Regardless of how
the server was built, the default value is 300, and the maximum possible value is 4294967296 (4GB).
--slave-checkpoint-period
was added in MySQL 5.6.3.
Introduced | 5.6.3 | ||
Command-Line Format | --slave-parallel-workers=# |
||
Option-File Format | slave-parallel-workers |
||
Permitted Values | |||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 1024 |
Sets the number of slave worker threads for executing replication events (transactions) in parallel. Setting this variable to 0 (the default) disables parallel execution. The maximum is 1024.
When parallel execution is enabled, the slave SQL thread acts as the coordinator for the slave worker threads, among which transactions are distributed on a per-database basis. This means that a worker thread on the slave slave can process successive transactions on a given database without waiting for updates to other databases to complete. The current implementation of multi-threading on the slave assumes that the data is partitioned per database, and that updates within a given database occur in the same relative order as they do on the master, in order to work correctly. However, transactions do not need to be coordinated between any two databases.
Due to the fact that transactions on different databases can occur in a different order on the slave
than on the master, checking for the most recently executed transaction does not guarantee that all
previous transactions from the master have been executed on the slave. This has implications for
logging and recovery when using a multi-threaded slave. For information about how to interpret
binary logging information when using multi-threading on the slave, see Section
13.7.5.35, "SHOW SLAVE STATUS
Syntax". In addition, this means
that START SLAVE UNTIL
is not supported with a multi-threaded slave.
When multi-threading is enabled, slave_transaction_retries
is treated as equal to 0, and cannot be
changed. (Currently, retrying of transactions is not supported with multi-threaded slaves.)
You should also note that, in MySQL 5.6.7 and later, enforcing foreign key relationships between tables in different databases causes multi-threaded slaves to use sequential rather than parallel mode, which can have a negative impact on performance. (Bug #14092635)
This option was added in MySQL 5.6.3.
The value set for this option (or for the corresponding slave_parallel_workers
system variable) was not always honored
correctly in MySQL 5.6.3; this problem was fixed in MySQL 5.6.4 (Bug #13334470).
--slave-pending-jobs-size-max=
#
Introduced | 5.6.3 | ||
Command-Line Format | --slave-pending-jobs-size-max=# |
||
Permitted Values | |||
Type | numeric |
||
Default | 16M |
||
Range | 1024 .. 18EB |
||
Block Size | 1024 |
For multithreaded slaves, this option sets the maximum amount of memory (in bytes) available to slave worker queues holding events not yet applied. Setting this option has no effect on slaves for which multithreading is not enabled.
The minimum possible value for this option is 1024; the default is 16MB. The maximum possible value is 18446744073709551615 (16 exabytes). Values that are not exact multiples of 1024 are rounded down to the next-highest multiple of 1024 prior to being stored.
The value for this option must not be less than the master's value for max_allowed_packet
; otherwise a slave worker queue may become
full while there remain events coming from the master to be processed.
This option was added in MySQL 5.6.3.
Command-Line Format | --skip-slave-start |
||
Option-File Format | skip-slave-start |
||
Permitted Values | |||
Type | boolean |
||
Default | FALSE |
Tells the slave server not to start the slave threads when the server starts. To start the threads
later, use a START SLAVE
statement.
--slave_compressed_protocol={0|1}
Command-Line Format | --slave_compressed_protocol |
||
Option-File Format | slave_compressed_protocol |
||
System Variable Name | slave_compressed_protocol
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | OFF |
If this option is set to 1, use compression for the slave/master protocol if both the slave and the master support it. The default is 0 (no compression).
Command-Line Format | --slave-load-tmpdir=path |
||
Option-File Format | slave-load-tmpdir |
||
System Variable Name | slave_load_tmpdir
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | file name |
||
Default | /tmp |
The name of the directory where the slave creates temporary files. This option is by default equal
to the value of the tmpdir
system variable. When the slave SQL thread replicates a LOAD DATA INFILE
statement, it extracts the file to be loaded
from the relay log into temporary files, and then loads these into the table. If the file loaded on
the master is huge, the temporary files on the slave are huge, too. Therefore, it might be advisable
to use this option to tell the slave to put temporary files in a directory located in some file
system that has a lot of available space. In that case, the relay logs are huge as well, so you
might also want to use the --relay-log
option to place the relay logs in that file system.
The directory specified by this option should be located in a disk-based file system (not a
memory-based file system) because the temporary files used to replicate LOAD DATA INFILE
must survive machine restarts. The directory
also should not be one that is cleared by the operating system during the system startup process.
slave-max-allowed-packet=
bytes
Introduced | 5.6.6 | ||
Command-Line Format | --slave-max-allowed-packet=# |
||
Option-File Format | slave-max-allowed-packet |
||
Permitted Values | |||
Type | numeric |
||
Default | 1073741824 |
||
Range | 1024 .. 1073741824 |
In MySQL 5.6.6 and later, this option sets the maximum packet size in bytes for the slave SQL and
I/O threads, so that large updates using row-based replication do not cause replication to fail
because an update exceeded max_allowed_packet
. (Bug #12400221, Bug #60926)
The corresponding server variable slave_max_allowed_packet
always has a value that is a positive
integer multiple of 1024; if you set it to some value that is not such a multiple, the value is
automatically rounded down to the next highest multiple of 1024. (For example, if you start the
server with --slave-max-allowed-packet=10000
, the value used is 9216;
setting 0 as the value causes 1024 to be used.) A truncation warning is issued in such cases.
The maximum (and default) value is 1073741824 (1 GB); the minimum is 1024.
Command-Line Format | --slave-net-timeout=# |
||
Option-File Format | slave-net-timeout |
||
System Variable Name | slave_net_timeout
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 3600 |
||
Min Value | 1 |
The number of seconds to wait for more data from the master before the slave considers the
connection broken, aborts the read, and tries to reconnect. The first retry occurs immediately after
the timeout. The interval between retries is controlled by the MASTER_CONNECT_RETRY
option for the CHANGE MASTER
TO
statement, and the number of reconnection attempts is limited by the --master-retry-count
option. The default is 3600 seconds (one hour).
slave-rows-search-algorithms=
list
Introduced | 5.6.6 | ||
Command-Line Format | --slave-rows-search-algorithms=list |
||
Option-File Format | slave-rows-search-algorithms |
||
Permitted Values | |||
Type | set |
||
Valid Values | TABLE_SCAN,INDEX_SCAN (default) |
||
INDEX_SCAN,HASH_SCAN |
|||
TABLE_SCAN,HASH_SCAN |
|||
TABLE_SCAN,INDEX_SCAN,HASH_SCAN
(equivalent to INDEX_SCAN,HASH_SCAN)
|
When preparing batches of rows for row-based logging and replication using slave_allow_batching
, this option controls how the rows are searched
for matches—that is, whether or not hashing is used for searches using a primary or unique key, some
other key, or no key at all. This option takes a comma-separated list of any 2 (or possibly 3)
values from the list INDEX_SCAN
, TABLE_SCAN
, HASH_SCAN
. The list need not
be quoted, but must contain no spaces, whether or not quotes are used. Possible combinations (lists)
and their effects are shown in the following table:
Index used / option value | INDEX_SCAN,HASH_SCAN orINDEX_SCAN,TABLE_SCAN,HASH_SCAN
|
INDEX_SCAN,TABLE_SCAN |
TABLE_SCAN,HASH_SCAN |
---|---|---|---|
Primary key or unique key | Index scan | index scan | Index hash |
(Other) Key | Index hash | Index scan | Index hash |
No index | Table hash | Table scan | Table hash |
The order in which the algorithms are specified in the list does not make any difference in the
order in which they are displayed by a SELECT
or SHOW VARIABLES
statement (which is the same as that used in the
table just shown previously).The default value is TABLE_SCAN,INDEX_SCAN
,
which means that all searches that can use indexes do use them, and searches without any indexes use
table scans.
Specifying INDEX_SCAN,TABLE_SCAN,HASH_SCAN
has the same effect as
specifying INDEX_SCAN,HASH_SCAN
. To use hashing for any searches that
does not use a primary or unique key, set this option to INDEX_SCAN,HASH_SCAN
. To force hashing for all searches, set it to TABLE_SCAN,HASH_SCAN
.
This option was added in MySQL 5.6.6.
--slave-skip-errors=[
err_code1
,err_code2
,...|all]
Command-Line Format | --slave-skip-errors=name |
||
Option-File Format | slave-skip-errors |
||
System Variable Name | slave_skip_errors
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | string |
||
Default | OFF |
||
Valid Values | [list of error codes] |
||
all |
|||
ddl_exist_errors |
Normally, replication stops when an error occurs on the slave. This gives you the opportunity to resolve the inconsistency in the data manually. This option tells the slave SQL thread to continue replication when a statement returns any of the errors listed in the option value.
Do not use this option unless you fully understand why you are getting errors. If there are no bugs in your replication setup and client programs, and no bugs in MySQL itself, an error that stops replication should never occur. Indiscriminate use of this option results in slaves becoming hopelessly out of synchrony with the master, with you having no idea why this has occurred.
For error codes, you should use the numbers provided by the error message in your slave error log
and in the output of SHOW SLAVE
STATUS
. Appendix C,
Errors, Error Codes, and Common Problems, lists server error codes.
You can also (but should not) use the very nonrecommended value of all
to cause the slave to ignore all error messages and keeps going regardless of what happens. Needless
to say, if you use all
, there are no guarantees regarding the integrity
of your data. Please do not complain (or file bug reports) in this case if the slave's data is not
anywhere close to what it is on the master. You have been
warned.
MySQL 5.6 supports an additional shorthand value ddl_exists_errors
,
which is equivalent to the error code list 1007,1008,4050,1051,1054,1060,1061,1068,1094,1146
.
Examples:
--slave-skip-errors=1062,1053--slave-skip-errors=all--slave-skip-errors=ddl_exist_errors
--slave-sql-verify-checksum={0|1}
Introduced | 5.6.2 | ||
Command-Line Format | --slave-sql-verify-checksum=value |
||
Option-File Format | slave-sql-verify-checksum |
||
Permitted Values | |||
Type | boolean |
||
Default | 0 |
||
Valid Values | 0 |
||
1 |
When this option is enabled, the slave examines checksums read from the relay log, in the event of a mismatch, the slave stops with an error. Disabled by default.
This option was added in MySQL 5.6.2.
Obsolete options. The
following options are removed in MySQL 5.6. If you attempt to start mysqld with any of these options in MySQL 5.6, the server
aborts with an unknown variable error. To set the replication
parameters formerly associated with these options, you must use the CHANGE MASTER TO
...
statement (see Section 13.4.2.1, "CHANGE MASTER TO
Syntax").
The options affected are shown in this list:
System variables used on replication slaves. The following list
describes system variables for controlling replication slave servers. They can be set at server startup and some
of them can be changed at runtime using SET
.
Server options used with replication slaves are listed earlier in this section.
Command-Line Format | --slave-allow-batching |
||
Option-File Format | slave_allow_batching |
||
System Variable Name | slave_allow_batching
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | off |
Whether or not batched updates are enabled on replication slaves.
Command-Line Format | --init-slave=name |
||
Option-File Format | init_slave |
||
System Variable Name | init_slave
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | string |
This variable is similar to init_connect
, but is a string to be executed by a slave server each
time the SQL thread starts. The format of the string is the same as for the init_connect
variable.
The SQL thread sends an acknowledgment to the client before it executes init_slave
. Therefore, it is not guaranteed that init_slave
has been executed when START SLAVE
returns. See Section
13.4.2.5, "START SLAVE
Syntax", for more information.
Introduced | 5.6.11 | ||
System Variable Name | log_slow_slave_statements
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | OFF |
When the slow query log is enabled, this variable enables logging for queries that have taken more
than long_query_time
seconds to execute on the slave. This variable was added in MySQL 5.6.11.
Introduced | 5.6.2 | ||
System Variable Name | master_info_repository
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | string |
||
Default | FILE |
||
Valid Values | FILE |
||
TABLE |
The setting of this variable determines whether the slave logs master status and connection
information to a FILE
(master.info
), or
to a TABLE
(mysql.slave_master_info
).
This variable was added in MySQL 5.6.2.
Command-Line Format | --relay-log=name |
||
Option-File Format | relay-log |
||
System Variable Name | relay_log
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | file name |
The name of the relay log file.
Introduced | 5.6.2 | ||
System Variable Name | relay_log_basename
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | file name |
||
Default | datadir + '/' + hostname + '-relay-bin' |
Holds the name and complete path to the relay log file.
The relay_log_basename
system variable was added in MySQL 5.6.2.
Command-Line Format | --relay-log-index |
||
Option-File Format | relay_log_index |
||
System Variable Name | relay_log_index
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | string |
||
Default | *host_name*-relay-bin.index |
The name of the relay log index file. The default name is
in the data directory,
where host_name
-relay-bin.indexhost_name
is the name of the slave server.
Command-Line Format | --relay-log-info-file=file_name |
||
Option-File Format | relay_log_info_file |
||
System Variable Name | relay_log_info_file
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | string |
||
Default | relay-log.info |
The name of the file in which the slave records information about the relay logs. The default name
is relay-log.info
in the data directory.
Introduced | 5.6.2 | ||
System Variable Name | relay_log_info_repository
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | string |
||
Default | FILE |
||
Valid Values | FILE |
||
TABLE |
This variable determines whether the slave's position in the relay logs is written to a FILE
(relay-log.info
) or to a TABLE
(mysql.slave_relay_log_info
).
This variable was added in MySQL 5.6.2.
Command-Line Format | --relay-log-recovery |
||
Option-File Format | relay_log_recovery |
||
System Variable Name | relay_log_recovery
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | FALSE |
Enables automatic relay log recovery immediately following server startup, which means that the
replication slave discards all unprocessed relay logs and retrieves them from the replication
master. In MySQL 5.6.5 and earlier, it was possible to change this global variable dynamically;
beginning with MySQL 5.6.6, it is read-only. (Bug #13840948) Regardless of the MySQL Server version,
its value can be changed by starting the slave with the --relay-log-recovery
option, which should be used following a
crash on the replication slave to ensure that no possibly corrupted relay logs are processed, and
must be used in order to guarantee a crash-proof slave. The default value is 0 (disabled).
When relay_log_recovery
is enabled and the slave has stopped due to
errors encountered while running in multi-threaded mode, you cannot execute CHANGE MASTER TO
if there are any gaps in the log. Beginning with
MySQL 5.6.6, you should use START
SLAVE UNTIL SQL_AFTER_MTS_GAPS
to ensure that all gaps are processed before switching
back to single-threaded mode or executing a CHANGE MASTER TO
statement.
Introduced | 5.6.3 | ||
Command-Line Format | --slave-checkpoint-group=# |
||
Option-File Format | slave_checkpoint_group |
||
System Variable Name | slave_checkpoint_group=# |
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 512 |
||
Range | 32 .. 524280 |
||
Block Size | 8 |
Sets the maximum number of transactions that can be processed by a multi-threaded slave before a
checkpoint operation is called to update its status as shown by SHOW SLAVE STATUS
. Setting this variable has no effect on slaves
for which multithreading is not enabled.
This variable works in combination with the slave_checkpoint_period
system variable in such a way that, when
either limit is exceeded, the checkpoint is executed and the counters tracking both the number of
transactions and the time elapsed since the last checkpoint are reset.
The minimum allowed value for this variable is 32, unless the server was built using -DWITH_DEBUG
, in which case the minimum value is 1. The effective
value is always a multiple of 8; you can set it to a value that is not such a multiple, but the
server rounds it down to the next lower multiple of 8 before storing the value. (Exception: No such rounding is performed by the debug
server.) Regardless of how the server was built, the default value is 512, and the maximum allowed
value is 524280.
slave_checkpoint_group
was added in MySQL 5.6.3.
Introduced | 5.6.3 | ||
Command-Line Format | --slave-checkpoint-period=# |
||
Option-File Format | slave_checkpoint_period |
||
System Variable Name | slave_checkpoint_period=# |
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 300 |
||
Range | 1 .. 4G |
Sets the maximum time (in milliseconds) that is allowed to pass before a checkpoint operation is
called to update the status of a multi-threaded slave as shown by SHOW SLAVE STATUS
. Setting this variable has no effect on slaves
for which multithreading is not enabled.
This variable works in combination with the slave_checkpoint_group
system variable in such a way that, when
either limit is exceeded, the checkpoint is executed and the counters tracking both the number of
transactions and the time elapsed since the last checkpoint are reset.
The minimum allowed value for this variable is 1, unless the server was built using -DWITH_DEBUG
, in which case the minimum value is 0. Regardless of how
the server was built, the default value is 300, and the maximum possible value is 4294967296 (4GB).
slave_checkpoint_period
was added in MySQL 5.6.3.
Command-Line Format | --slave_compressed_protocol |
||
Option-File Format | slave_compressed_protocol |
||
System Variable Name | slave_compressed_protocol
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | OFF |
Whether to use compression of the slave/master protocol if both the slave and the master support it.
Command-Line Format | --slave-exec-mode=mode |
||
Option-File Format | slave_exec_mode |
||
System Variable Name | slave_exec_mode
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | enumeration |
||
Default | STRICT (ALL) |
||
Default | IDEMPOTENT (NDB) |
||
Valid Values | IDEMPOTENT |
||
STRICT |
Controls whether IDEMPOTENT
or STRICT
mode
is used in replication conflict resolution and error checking. IDEMPOTENT
mode causes suppression of duplicate-key and no-key-found
errors. This mode should be employed in multi-master replication, circular replication, and some
other special replication scenarios. STRICT
mode is the default, and is
suitable for most other cases.
MySQL Cluster ignores any value explicitly set for slave_exec_mode
, and always treats it as IDEMPOTENT
.
Command-Line Format | --slave-load-tmpdir=path |
||
Option-File Format | slave-load-tmpdir |
||
System Variable Name | slave_load_tmpdir
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | file name |
||
Default | /tmp |
The name of the directory where the slave creates temporary files for replicating LOAD DATA INFILE
statements.
Introduced | 5.6.6 | ||
System Variable Name | slave_max_allowed_packet
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 1073741824 |
||
Range | 1024 .. 1073741824 |
In MySQL 5.6.6 and later, this variable sets the maximum packet size for the slave SQL and I/O
threads, so that large updates using row-based replication do not cause replication to fail because
an update exceeded max_allowed_packet
.
This global variable always has a value that is a positive integer multiple of 1024; if you set it
to some value that is not, the value is rounded down to the next highest multiple of 1024 for it is
stored or used; setting slave_max_allowed_packet
to 0 causes 1024 to be
used. (A truncation warning is issued in all such cases.) The default and maximum value is
1073741824 (1 GB); the minimum is 1024.
slave_max_allowed_packet
can also be set at startup, using the --slave-max-allowed-packet
option.
Command-Line Format | --slave-net-timeout=# |
||
Option-File Format | slave-net-timeout |
||
System Variable Name | slave_net_timeout
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 3600 |
||
Min Value | 1 |
The number of seconds to wait for more data from a master/slave connection before aborting the read.
Introduced | 5.6.3 | ||
System Variable Name | slave_parallel_workers
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 1024 |
Sets the number of slave worker threads for executing replication events (transactions) in parallel. Setting this variable to 0 (the default) disables parallel execution. The maximum is 1024.
When parallel execution is enabled, the slave SQL thread acts as the coordinator for the slave worker threads, among which transactions are distributed on a per-database basis. This means that a worker thread on the slave slave can process successive transactions on a given database without waiting for updates to other databases to complete. The current implementation of multi-threading on the slave assumes that the data is partitioned per database, and that updates within a given database occur in the same relative order as they do on the master, in order to work correctly. However, transactions do not need to be coordinated between any two databases.
Due to the fact that transactions on different databases can occur in a different order on the slave
than on the master, checking for the most recently executed transaction does not guarantee that all
previous transactions from the master have been executed on the slave. This has implications for
logging and recovery when using a multi-threaded slave. For information about how to interpret
binary logging information when using multi-threading on the slave, see Section
13.7.5.35, "SHOW SLAVE STATUS
Syntax". In addition, this means
that START SLAVE UNTIL
is not supported with a multi-threaded slave.
When multi-threading is enabled, slave_transaction_retries
is treated as equal to 0, and cannot be
changed. (Currently, retrying of transactions is not supported with multi-threaded slaves.)
This variable was added in MySQL 5.6.3.
The value set for this variable (or for the corresponding --slave-parallel-workers
option) was not always honored correctly
in MySQL 5.6.3; this problem was fixed in MySQL 5.6.4 (Bug #13334470).
Introduced | 5.6.3 | ||
System Variable Name | slave_pending_jobs_size_max
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
||
Default | 0 |
||
Range | 1024 .. 18EB |
||
Block Size | 1024 |
For multithreaded slaves, this variable sets the maximum amount of memory (in bytes) available to slave worker queues holding events not yet applied. Setting this variable has no effect on slaves for which multithreading is not enabled.
The minimum possible value for this variable is 1024; the default is 16MB. The maximum possible value is 18446744073709551615 (16 exabytes). Values that are not exact multiples of 1024 are rounded down to the next-highest multiple of 1024 prior to being stored.
The value of this variable must not be less than the master's value for max_allowed_packet
; otherwise a slave worker queue may become
full while there remain events coming from the master to be processed.
slave_pending_jobs_size_max
was added in MySQL 5.6.3.
Introduced | 5.6.6 | ||
System Variable Name | slave_rows_search_algorithms=list |
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | set |
||
Valid Values | TABLE_SCAN,INDEX_SCAN (default) |
||
INDEX_SCAN,HASH_SCAN |
|||
TABLE_SCAN,HASH_SCAN |
|||
TABLE_SCAN,INDEX_SCAN,HASH_SCAN
(equivalent to INDEX_SCAN,HASH_SCAN)
|
When preparing batches of rows for row-based logging and replication using slave_allow_batching
, the slave_rows_search_algorithms
variable controls how the rows are searched for matches—that is, whether or not hashing is used for
searches using a primary or unique key, using some other key, or using no key at all. This option
takes a comma-separated list of at least 2 values from the list INDEX_SCAN
, TABLE_SCAN
, HASH_SCAN
. The value expected as a string, so the value must be
quoted. In addition, the value must not contain any spaces. Possible combinations (lists) and their
effects are shown in the following table:
Index used / option value | INDEX_SCAN,HASH_SCAN orINDEX_SCAN,TABLE_SCAN,HASH_SCAN
|
INDEX_SCAN,TABLE_SCAN |
TABLE_SCAN,HASH_SCAN |
---|---|---|---|
Primary key or unique key | Index scan | index scan | Index hash |
(Other) Key | Index hash | Index scan | Index hash |
No index | Table hash | Table scan | Table hash |
The order in which the algorithms are specified in the list does not make any difference in the
order in which they are displayed by a SELECT
or SHOW VARIABLES
statement, as shown here:
mysql>SET GLOBAL slave_rows_search_algorithms = "INDEX_SCAN,TABLE_SCAN";
Query OK, 0 rows affected (0.00 sec)mysql>SHOW VARIABLES LIKE '%algorithms%';
+------------------------------+-----------------------+| Variable_name | Value |+------------------------------+-----------------------+| slave_rows_search_algorithms | TABLE_SCAN,INDEX_SCAN |+------------------------------+-----------------------+1 row in set (0.00 sec)mysql>SET GLOBAL slave_rows_search_algorithms = "TABLE_SCAN,INDEX_SCAN";
Query OK, 0 rows affected (0.00 sec)mysql>SHOW VARIABLES LIKE '%algorithms%';
+------------------------------+-----------------------+| Variable_name | Value |+------------------------------+-----------------------+| slave_rows_search_algorithms | TABLE_SCAN,INDEX_SCAN |+------------------------------+-----------------------+1 row in set (0.00 sec)
The default value is TABLE_SCAN,INDEX_SCAN
, which means that all
searches that can use indexes do use them, and searches without any indexes use table scans.
Specifying INDEX_SCAN,TABLE_SCAN,HASH_SCAN
has the same effect as
specifying INDEX_SCAN,HASH_SCAN
. To use hashing for any searches that
does not use a primary or unique key, set this variable to INDEX_SCAN,HASH_SCAN
.
To force hashing for all searches, set it to TABLE_SCAN,HASH_SCAN
.
This variable was added in MySQL 5.6.6.
Command-Line Format | --slave-skip-errors=name |
||
Option-File Format | slave-skip-errors |
||
System Variable Name | slave_skip_errors
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values | |||
Type | string |
||
Default | OFF |
||
Valid Values | [list of error codes] |
||
all |
|||
ddl_exist_errors |
Normally, replication stops when an error occurs on the slave. This gives you the opportunity to resolve the inconsistency in the data manually. This variable tells the slave SQL thread to continue replication when a statement returns any of the errors listed in the variable value.
Introduced | 5.6.2 | ||
System Variable Name | slave_sql_verify_checksum
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | boolean |
||
Default | 0 |
||
Valid Values | 0 |
||
1 |
Cause the slave SQL thread to verify data using the checksums read from the relay log. In the event of a mismatch, the slave stops with an error.
The slave I/O thread always reads checksums if possible when accepting events from over the network.
slave_sql_verify_checksum
was added in MySQL 5.6.2.
Command-Line Format | --slave_transaction_retries=# |
||
Option-File Format | slave_transaction_retries |
||
System Variable Name | slave_transaction_retries
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 10 |
||
Range | 0 .. 4294967295 |
||
Permitted Values | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 10 |
||
Range | 0 .. 18446744073709547520 |
If a replication slave SQL thread fails to execute a transaction because of an InnoDB
deadlock or because the transaction's execution time exceeded
InnoDB
's innodb_lock_wait_timeout
or NDB
's TransactionDeadlockDetectionTimeout
or TransactionInactiveTimeout
, it automatically retries slave_transaction_retries
times before stopping with an error. The default value is 10.
Transactions cannot be retried when using a multi-threaded slave. In other words, whenever slave_parallel_workers
is greater than 0, slave_transaction_retries
is treated as equal to 0,
and cannot be changed.
Command-Line Format | --slave_type_conversions=set |
||
Option-File Format | slave_type_conversions |
||
System Variable Name | slave_type_conversions
|
||
Variable Scope | Global | ||
Dynamic Variable | No | ||
Permitted Values (<= 5.6.12) | |||
Type | set |
||
Default |
|
||
Valid Values | ALL_LOSSY |
||
ALL_NON_LOSSY |
|||
Permitted Values (>= 5.6.13) | |||
Type | set |
||
Default |
|
||
Valid Values | ALL_LOSSY |
||
ALL_NON_LOSSY |
|||
ALL_SIGNED |
|||
ALL_UNSIGNED |
Controls the type conversion mode in effect on the slave when using row-based replication. In MySQL
5.6.13 and later, its value is a comma-delimited set of zero or more elements from the list: ALL_LOSSY
, ALL_NON_LOSSY
, ALL_SIGNED
, ALL_UNSIGNED
. Set this
variable to an empty string to disallow type conversions between the master and the slave. Changes
require a restart of the slave to take effect.
ALL_SIGNED
and ALL_UNSIGNED
were added in
MySQL 5.6.13 (Bug#15831300). For additional information on type conversion modes applicable to
attribute promotion and demotion in row-based replication, see Row-based
replication: attribute promotion and demotion.
System Variable Name | sql_slave_skip_counter
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values | |||
Type | numeric |
The number of events from the master that a slave server should skip.
This option is incompatible with GTID-based replication, and must not be set to a nonzero value when
--gtid-mode=ON
. In MySQL 5.6.10 and later, trying to do so is
specifically disallowed. (Bug #15833516) If you need to skip transactions when employing GTIDs, use
gtid_executed
from the master instead. See Injecting
empty transactions, for information about how to do this.
If skipping the number of events specified by setting this variable would cause the
slave to begin in the middle of an event group, the slave continues to skip until it finds the
beginning of the next event group and begins from that point. For more information, see Section 13.4.2.4, "SET GLOBAL sql_slave_skip_counter
Syntax".
Command-Line Format | --sync-master-info=# |
||
Option-File Format | sync_master_info |
||
System Variable Name | sync_master_info
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values (<= 5.6.5) | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 4294967295 |
||
Permitted Values (<= 5.6.5) | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 18446744073709547520 |
||
Permitted Values (>= 5.6.6) | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 10000 |
||
Range | 0 .. 4294967295 |
||
Permitted Values (>= 5.6.6) | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 10000 |
||
Range | 0 .. 18446744073709547520 |
The effects of this variable on a replication slave depend on whether the slave's master_info_repository
is set to FILE
or
TABLE
, as explained in the following paragraphs.
master_info_repository = FILE
. If the value of sync_master_info
is greater than 0, the slave synchronizes its master.info
file to disk (using fdatasync()
)
after every sync_master_info
events. If it is 0, the MySQL server
performs no synchronization of the master.info
file to disk; instead,
the server relies on the operating system to flush its contents periodically as with any other file.
master_info_repository = TABLE
. If the value of sync_master_info
is greater than 0, the slave updates its master info
repository table after every sync_master_info
events. If it is 0, the
table is never updated.
The default value for sync_master_info
is 10000 as of MySQL 5.6.6, 0
before that.
Command-Line Format | --sync-relay-log=# |
||
Option-File Format | sync_relay_log |
||
System Variable Name | sync_relay_log
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values (<= 5.6.5) | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 4294967295 |
||
Permitted Values (<= 5.6.5) | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 18446744073709547520 |
||
Permitted Values (>= 5.6.6) | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 10000 |
||
Range | 0 .. 4294967295 |
||
Permitted Values (>= 5.6.6) | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 10000 |
||
Range | 0 .. 18446744073709547520 |
If the value of this variable is greater than 0, the MySQL server synchronizes its relay log to disk
(using fdatasync()
) after every sync_relay_log
writes to the relay log. There is one write to the
relay log per statement if autocommit is enabled, and one write per transaction otherwise. A value
of 0 does no synchronizing to disk—in this case, the server relies on the operating system to flush
the relay log's contents from time to time as for any other file. A value of 1 is the safest choice
because in the event of a crash you lose at most one statement or transaction from the relay log.
However, it is also the slowest choice (unless the disk has a battery-backed cache, which makes
synchronization very fast). The default is 10000 as of MySQL 5.6.6, 0 before that.
Command-Line Format | --sync-relay-log-info=# |
||
Option-File Format | sync_relay_log_info |
||
System Variable Name | sync_relay_log_info
|
||
Variable Scope | Global | ||
Dynamic Variable | Yes | ||
Permitted Values (<= 5.6.5) | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 4294967295 |
||
Permitted Values (<= 5.6.5) | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 0 |
||
Range | 0 .. 18446744073709547520 |
||
Permitted Values (>= 5.6.6) | |||
Platform Bit Size | 32 |
||
Type | numeric |
||
Default | 10000 |
||
Range | 0 .. 4294967295 |
||
Permitted Values (>= 5.6.6) | |||
Platform Bit Size | 64 |
||
Type | numeric |
||
Default | 10000 |
||
Range | 0 .. 18446744073709547520 |
The effects of this variable on the slave depend on the server's relay_log_info_repository
setting (FILE
or TABLE
), and if this is TABLE
,
additionally on whether the storage engine used by the relay log info table is transactional (such
as InnoDB
) or not (MyISAM
). The
effects of these factors on the behavior of the server for sync_relay_log_info
values of zero and greater than zero are shown in
the following table:
sync_relay_log_info |
relay_log_info_repository |
||
---|---|---|---|
FILE |
TABLE |
||
Transactional | Nontransactional | ||
|
The slave synchronizes its |
The table is updated after each transaction. ( |
The table is updated after every |
0 |
The MySQL server performs no synchronization of the |
The table is never updated. |
The default value for sync_relay_log_info
is 10000 as of MySQL 5.6.6, 0
before that.
Options for logging slave status to tables. MySQL 5.6 and later supports logging of replication slave status information to tables rather than files. Writing of the master info log and the relay log info log can be configured separately using two server options added in MySQL 5.6.2 and listed here:
--master-info-repository={FILE|TABLE}
Introduced | 5.6.2 | ||
Command-Line Format | --master-info-repository=FILE|TABLE |
||
Option-File Format | master-info-repository |
||
Permitted Values | |||
Type | string |
||
Default | FILE |
||
Valid Values | FILE |
||
TABLE |
This option causes the server to write its master info log to a file or a table. The name of the
file defaults to master.info
; you can change the name of the file
using the --master-info-file
server option.
The default value for this option is FILE
. If you use TABLE
, the log is written to the slave_master_info
table in the mysql
database.
The --master-info-repository
option was added in MySQL 5.6.2.
--relay-log-info-repository={FILE|TABLE}
Introduced | 5.6.2 | ||
Command-Line Format | --relay-log-info-repository=FILE|TABLE |
||
Option-File Format | relay-log-info-repository |
||
Permitted Values | |||
Type | string |
||
Default | FILE |
||
Valid Values | FILE |
||
TABLE |
This option causes the server to log its relay log info to a file or a table. The name of the file
defaults to relay-log.info
; you can change the name of the file using
the --relay-log-info-file
server option.
The default value for this option is FILE
. If you use TABLE
, the log is written to the slave_relay_log_info
table in the mysql
database.
The --relay-log-info-repository
option was added in MySQL 5.6.2.
The info log tables and their contents are considered local to a given MySQL Server. In MySQL 5.6.9 and later, they are not replicated, and changes to them are not written to the binary log. (Bug #14741537)
For more information, see Section 16.2.2, "Replication Relay and Status Logs".