16.1.3.3 Replication Slave Options and Variables

Startup Options for Replication Slaves

System Variables Used on Replication Slaves

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
Important

Certain --master-xxx options are handled in a special way to ensure that the active replication configuration is not inadvertently altered or affected:

Before MySQL 5.1.17, these options are silently ignored if given unless there is no master.info file. If that file exists, the MySQL server has already previously been configured for replication, so the information in the file is used instead. Because the server gives an existing master.info file precedence over the startup options just described, you might elect not to use startup options for these values at all, and instead to specify the replication parameters associated with them by using the CHANGE MASTER TO statement. See Section 13.4.2.1, “CHANGE MASTER TO Syntax”.

Beginning with MySQL 5.1.17, these options are deprecated and have no effect when mysqld is started. If they are used, an appropriate warning is written to the error log. Instead, you must use CHANGE MASTER TO to set the values corresponding to the deprecated options. These options are removed in MySQL 5.5.

The master.info file format in MySQL 5.1 includes as its first line the number of lines in the file. (See Section 16.2.2, “Replication Relay and Status Logs”.) If you upgrade an older server (before MySQL 4.1.1) to a newer version, the new server upgrades the master.info file to the new format automatically when it starts. However, if you downgrade a newer server to an older version, you should remove the first line manually before starting the older server for the first time.

If no master.info file exists when the slave server starts, it uses the values for those options that are specified in option files or on the command line. This occurs when you start the server as a replication slave for the very first time, when you use CHANGE MASTER TO, or when you have run RESET SLAVE and then have shut down and restarted the slave.

Because the server uses master.info file contents and ignores any startup options that correspond to the values listed in the file, if you start the slave server with different values of the startup options that correspond to values in the file, the different values have no effect. To use different values, the preferred method is to use the CHANGE MASTER TO statement to reset the values while the slave is running. Alternatively, you can stop the server, remove the master.info file, and restart the server with different option values.

Suppose that you specify this option in your my.cnf file to configure a pre-5.1.17 slave server:

[mysqld]
master-host=some_host

The first time you start the server as a replication slave, it reads and uses that option from the my.cnf file. The server then records the value in the master.info file. The next time you start the server, it reads the master host value from the master.info file only and ignores the value in the option file. If you modify the my.cnf file to specify a different master host value of some_other_host, the change has no effect. Instead, use CHANGE MASTER TO to change the value.

This example shows a more extensive use of startup options to configure a pre-5.1.17 slave server:

[mysqld]
server-id=2
master-host=db-master.mycompany.com
master-port=3306
master-user=pertinax
master-password=freitag
master-connect-retry=60
report-host=db-slave.mycompany.com

As of 5.1.17, the master-xxx options are ignored and result in warnings in the error log.

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.

  • --abort-slave-event-count

    Command-Line Format--abort-slave-event-count=#
    Option-File Formatabort-slave-event-count
     Permitted Values
    Typenumeric
    Default0
    Min Value0

    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 Formatdisconnect-slave-event-count
     Permitted Values
    Typenumeric
    Default0

    This option is used internally by the MySQL test suite for replication testing and debugging.

  • --log-slave-updates

    Command-Line Format--log-slave-updates
    Option-File Formatlog-slave-updates
    System Variable Namelog_slave_updates
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typeboolean
    DefaultOFF

    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. --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.

    When using MySQL Cluster Replication prior to MySQL Cluster NDB 6.2.16 and MySQL Cluster NDB 6.3.13, records for empty epochs—that is, epochs in which no changes to NDBCLUSTER data or tables took place—were inserted into the ndb_apply_status and ndb_binlog_index tables on the slave even when --log-slave-updates was disabled (Bug #37472). Beginning with MySQL Cluster NDB 6.3.33, MySQL Cluster NDB 7.0.14, and MySQL Cluster NDB 7.1.3, it is possible to re-enable the older behavior by using the --ndb-log-empty-epochs option.

    Note

    The --ndb-log-empty-epochs option was first implemented in MySQL Cluster NDB 6.3.21 and MySQL Cluster NDB 6.4.1, but did not work correctly before the versions cited previously.

  • --log-slow-slave-statements

    Introduced5.1.21
    Command-Line Format--log-slow-slave-statements
    Option-File Formatlog-slow-slave-statements
     Permitted Values
    Typeboolean
    DefaultOFF

    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 option was added in MySQL 5.1.21.

  • --log-warnings[=level]

    Command-Line Format--log-warnings[=#]
     -W [#]
    Option-File Formatlog-warnings[=#]
    System Variable Namelog_warnings
    Variable ScopeGlobal, Session
    Dynamic VariableYes
     Permitted Values
    Platform Bit Size32
    Typenumeric
    Default1
    Range0 .. 4294967295
     Permitted Values
    Platform Bit Size64
    Typenumeric
    Default1
    Range0 .. 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 (1) by default; to disable it, use --log-warnings=0. Aborted connections are not logged to the error log unless the value is greater than 1.

    Note that the effects of this option are not limited to replication. It produces warnings across a spectrum of server activities.

  • --master-connect-retry=seconds

    Deprecated5.1.17
    Command-Line Format--master-connect-retry=#
    Option-File Formatmaster-connect-retry
     Permitted Values
    Typenumeric
    Default60

    The number of seconds that the slave thread sleeps before trying to reconnect to the master in case the master goes down or the connection is lost. The value in the master.info file takes precedence if it can be read. If not set, the default is 60. Connection retries are not invoked until the slave times out reading data from the master according to the value of --slave-net-timeout. The number of reconnection attempts is limited by the --master-retry-count option.

    This option is deprecated as of MySQL 5.1.17 and is removed in MySQL 5.5.

  • slave-max-allowed-packet=bytes

    Introduced5.1.64
    Command-Line Format--slave-max-allowed-packet=#
    Option-File Formatslave-max-allowed-packet
     Permitted Values
    Typenumeric
    Default1073741824
    Range1024 .. 1073741824

    In MySQL 5.1.64 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.

  • --master-host=host_name

    Deprecated5.1.17
    Command-Line Format--master-host=name
    Option-File Formatmaster-host
     Permitted Values
    Typestring

    The host name or IP address of the master replication server. The value in master.info takes precedence if it can be read. If no master host is specified, the slave thread does not start.

    This option is deprecated as of MySQL 5.1.17 and is removed in MySQL 5.5.

  • --master-info-file=file_name

    Command-Line Format--master-info-file=file_name
    Option-File Formatmaster-info-file
     Permitted Values
    Typefile name
    Defaultmaster.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”.

  • --master-password=password

    Deprecated5.1.17
    Command-Line Format--master-password=name
    Option-File Formatmaster-password
     Permitted Values
    Typestring

    The password of the account that the slave thread uses for authentication when it connects to the master. The value in the master.info file takes precedence if it can be read. If not set, an empty password is assumed.

    This option is deprecated as of MySQL 5.1.17 and is removed in MySQL 5.5.

  • --master-port=port_number

    Deprecated5.1.17
    Command-Line Format--master-port=#
    Option-File Formatmaster-port
     Permitted Values
    Typenumeric
    Default3306

    The TCP/IP port number that the master is listening on. The value in the master.info file takes precedence if it can be read. If not set, the compiled-in setting is assumed (normally 3306).

    This option is deprecated as of MySQL 5.1.17 and is removed in MySQL 5.5.

  • --master-retry-count=count

    Command-Line Format--master-retry-count=#
    Option-File Formatmaster-retry-count
     Permitted Values
    Platform Bit Size32
    Typenumeric
    Default86400
    Range0 .. 4294967295
     Permitted Values
    Platform Bit Size64
    Typenumeric
    Default86400
    Range0 .. 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 (or the MASTER_CONNECT_RETRY option of the CHANGE MASTER TO statement) and 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.

  • --master-ssl, --master-ssl-ca=file_name, --master-ssl-capath=directory_name, --master-ssl-cert=file_name, --master-ssl-cipher=cipher_list, --master-ssl-key=file_name

    These options are used for setting up a secure replication connection to the master server using SSL. Their meanings are the same as the corresponding --ssl, --ssl-ca, --ssl-capath, --ssl-cert, --ssl-cipher, --ssl-key options that are described in Section 6.3.6.4, “SSL Command Options”. The values in the master.info file take precedence if they can be read.

    These options are deprecated as of MySQL 5.1.17 and are removed in MySQL 5.5.

  • --master-user=user_name

    Deprecated5.1.17
    Command-Line Format--master-user=name
    Option-File Formatmaster-user
     Permitted Values
    Typestring
    Defaulttest

    The user name of the account that the slave thread uses for authentication when it connects to the master. This account must have the REPLICATION SLAVE privilege. The value in the master.info file takes precedence if it can be read. If the master user name is not set, the name test is assumed.

    This option is deprecated as of MySQL 5.1.17 and is removed in MySQL 5.5.

  • --max-relay-log-size=size

    Command-Line Format--max_relay_log_size=#
    Option-File Formatmax_relay_log_size
    System Variable Namemax_relay_log_size
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typenumeric
    Default0
    Range0 .. 1073741824

    The size at which the server rotates relay log files automatically. If this value is nonzero, the relay log is rotated automatically when its size exceeds this value. If this value is zero (the default), the size at which relay log rotation occurs is determined by the value of max_binlog_size. For more information, see Section 16.2.2.1, “The Slave Relay Log”.

  • --read-only

    Command-Line Format--read-only
    Option-File Formatread_only
    System Variable Nameread_only
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typeboolean
    Defaultfalse

    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.

  • --relay-log=file_name

    Command-Line Format--relay-log=name
    Option-File Formatrelay-log
    System Variable Namerelay_log
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typefile name

    The basename for the relay log. The default basename is host_name-relay-bin. 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.

    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.

    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.

  • --relay-log-index=file_name

    Command-Line Format--relay-log-index=name
    Option-File Formatrelay-log-index
    System Variable Namerelay_log_index
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typefile name

    The name to use for the relay log index file. The default name is host_name-relay-bin.index in the data directory, where host_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 Formatrelay-log-info-file
     Permitted Values
    Typefile name
    Defaultrelay-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”.

  • --relay-log-purge={0|1}

    Command-Line Format--relay_log_purge
    Option-File Formatrelay_log_purge
    System Variable Namerelay_log_purge
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typeboolean
    DefaultTRUE

    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.

  • --relay-log-space-limit=size

    Command-Line Format--relay_log_space_limit=#
    Option-File Formatrelay_log_space_limit
    System Variable Namerelay_log_space_limit
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Platform Bit Size32
    Typenumeric
    Default0
    Range0 .. 4294967295
     Permitted Values
    Platform Bit Size64
    Typenumeric
    Default0
    Range0 .. 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.

  • --replicate-do-db=db_name

    Command-Line Format--replicate-do-db=name
    Option-File Formatreplicate-do-db
     Permitted Values
    Typestring

    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 some_db.some_table SET foo='bar' while a different database (or no database) is selected.

    Warning

    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=db_name.% instead. See Section 16.2.3, “How Servers Evaluate Replication Filtering Rules”.

    Note

    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.

    Beginning with MySQL 5.1.35, this option has no effect on BEGIN, COMMIT, or ROLLBACK statements. (Bug #43263)

  • --replicate-ignore-db=db_name

    Command-Line Format--replicate-ignore-db=name
    Option-File Formatreplicate-ignore-db
     Permitted Values
    Typestring

    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=db_name.% instead. See Section 16.2.3, “How Servers Evaluate Replication Filtering Rules”.

    Note

    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.

    Beginning with MySQL 5.1.35, this option has no effect on BEGIN, COMMIT, or ROLLBACK statements. (Bug #43263)

  • --replicate-do-table=db_name.tbl_name

    Command-Line Format--replicate-do-table=name
    Option-File Formatreplicate-do-table
     Permitted Values
    Typestring

    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 Formatreplicate-ignore-table
     Permitted Values
    Typestring

    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 Formatreplicate-rewrite-db
     Permitted Values
    Typestring

    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. 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.

    Statements in which table names are qualified with database names when using this option do not work with table-level replication filtering options such as --replicate-do-table. Suppose we have a database named a on the master, one named b on the slave, each containing a table t, and have started the master with --replicate-rewrite-db='a->b'. At a later point in time, we execute DELETE FROM a.t. In this case, no relevant filtering rule works, for the reasons shown here:

    1. --replicate-do-table=a.t does not work because the slave has table t in database b.

    2. --replicate-do-table=b.t does not match the original statement and so is ignored.

    3. --replicate-do-table=*.t is handled identically to --replicate-do-table=a.t, and thus does not work, either.

    Similarly, the --replication-rewrite-db option does not work with cross-database updates.

    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"
    
  • --replicate-same-server-id

    Command-Line Format--replicate-same-server-id
    Option-File Formatreplicate-same-server-id
     Permitted Values
    Typeboolean
    DefaultFALSE

    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 Formatreplicate-wild-do-table
     Permitted Values
    Typestring

    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 Formatreplicate-wild-ignore-table
     Permitted Values
    Typestring

    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.

  • --report-host=host_name

    Command-Line Format--report-host=host_name
    Option-File Formatreport-host
    System Variable Namereport_host
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typestring

    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.

  • --report-password=password

    Command-Line Format--report-password=name
    Option-File Formatreport-password
    System Variable Namereport_password
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typestring

    An arbitrary account password to be reported by the slave 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.

  • --report-port=slave_port_num

    Command-Line Format--report-port=#
    Option-File Formatreport-port
    System Variable Namereport_port
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typenumeric
    Default3306
    Range0 .. 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.

  • --report-user=user_name

    Command-Line Format--report-user=name
    Option-File Formatreport-user
    System Variable Namereport_user
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typestring

    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.

  • --show-slave-auth-info

    Command-Line Format--show-slave-auth-info
    Option-File Formatshow-slave-auth-info
     Permitted Values
    Typeboolean
    DefaultFALSE

    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.

  • --skip-slave-start

    Command-Line Format--skip-slave-start
    Option-File Formatskip-slave-start
     Permitted Values
    Typeboolean
    DefaultFALSE

    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 Formatslave_compressed_protocol
    System Variable Nameslave_compressed_protocol
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typeboolean
    DefaultOFF

    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).

  • --slave-load-tmpdir=file_name

    Command-Line Format--slave-load-tmpdir=path
    Option-File Formatslave-load-tmpdir
    System Variable Nameslave_load_tmpdir
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typedirectory 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-net-timeout=seconds

    Command-Line Format--slave-net-timeout=#
    Option-File Formatslave-net-timeout
    System Variable Nameslave_net_timeout
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typenumeric
    Default3600
    Min Value1

    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 or --master-connect-retry option, and the number of reconnection attempts is limited by the --master-retry-count option. The default is 3600 seconds (one hour).

  • --slave-skip-errors=[err_code1,err_code2,...|all]

    (MySQL Cluster NDB 7.0.33 and later; MySQL Cluster NDB 7.1.22 and later:) --slave-skip-errors=[err_code1,err_code2,...|all|ddl_exist_errors]

    Command-Line Format--slave-skip-errors=name
    Option-File Formatslave-skip-errors
    System Variable Nameslave_skip_errors
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values (>= 5.1.61-ndb-7.0.33,5.1.61-ndb-7.1.22)
    Typestring
    DefaultOFF
    Valid ValuesOFF
    [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.

    Note

    Prior to MySQL 5.1.35, this option had no effect with row-based logging. (Bug #39393)

    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 B, 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.

    For MySQL Cluster Replication in MySQL Cluster NDB 7.0 beginning with version 7.0.33 and MySQL Cluster NDB 7.1 beginning with version 7.1.22, an additional shorthand value ddl_exist_errors is supported for use with the enhanced failover mechanism which is implemented in that and later version of MySQL Cluster NDB 7.2. This value is equivalent to the error code list 1007,1008,1050,1051,1054,1060,1061,1068,1094,1146. This value is not supported by the mysqld binary included with the MySQL Server 5.1 distribution. (Bug #11762277, Bug #54854) For more information, see Section 17.6.8, “Implementing Failover with MySQL Cluster Replication”.

    Examples:

    --slave-skip-errors=1062,1053
    --slave-skip-errors=all
    --slave-skip-errors=ddl_exist_errors
    
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.

  • init_slave

    Command-Line Format--init-slave=name
    Option-File Formatinit_slave
    System Variable Nameinit_slave
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typestring

    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.

    Note

    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.7, “START SLAVE Syntax”, for more information.

  • relay_log

    Command-Line Format--relay-log=name
    Option-File Formatrelay-log
    System Variable Namerelay_log
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typefile name

    The name of the relay log file.

  • relay_log_index

    Command-Line Format--relay-log-index
    Option-File Formatrelay_log_index
    System Variable Namerelay_log_index
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typefile name
    Default*host_name*-relay-bin.index

    The name of the relay log index file. The default name is host_name-relay-bin.index in the data directory, where host_name is the name of the slave server.

  • relay_log_info_file

    Command-Line Format--relay-log-info-file=file_name
    Option-File Formatrelay_log_info_file
    System Variable Namerelay_log_info_file
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typefile name
    Defaultrelay-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.

  • rpl_recovery_rank

    This variable is unused, and is removed in MySQL 5.6.

  • slave_compressed_protocol

    Command-Line Format--slave_compressed_protocol
    Option-File Formatslave_compressed_protocol
    System Variable Nameslave_compressed_protocol
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typeboolean
    DefaultOFF

    Whether to use compression of the slave/master protocol if both the slave and the master support it.

  • slave_exec_mode

    Introduced5.1.23-ndb-6.2.14, 5.1.23-ndb-6.3.11, 5.1.24
    Command-Line Format--slave-exec-mode=mode
    Option-File Formatslave_exec_mode
    System Variable Nameslave_exec_mode
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typeenumeration
    DefaultSTRICT (ALL)
    DefaultIDEMPOTENT (NDB)
    Valid ValuesIDEMPOTENT
    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 is needed for multi-master replication, circular replication, and some other special replication scenarios for MySQL Cluster Replication. (See Section 17.6.10, “MySQL Cluster Replication: Multi-Master and Circular Replication”, and Section 17.6.11, “MySQL Cluster Replication Conflict Resolution”, for more information.) The mysqld supplied with MySQL Cluster ignores any value explicitly set for slave_exec_mode, and always treats it as IDEMPOTENT.

    In MySQL Server 5.1, STRICT mode is the default value. This should not be changed; currently, IDEMPOTENT mode is supported only by NDB.

  • slave_max_allowed_packet

    Introduced5.1.64
    System Variable Nameslave_max_allowed_packet
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typenumeric
    Default1073741824
    Range1024 .. 1073741824

    In MySQL 5.1.64 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.

  • slave_load_tmpdir

    Command-Line Format--slave-load-tmpdir=path
    Option-File Formatslave-load-tmpdir
    System Variable Nameslave_load_tmpdir
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typedirectory name
    Default/tmp

    The name of the directory where the slave creates temporary files for replicating LOAD DATA INFILE statements.

  • slave_net_timeout

    Command-Line Format--slave-net-timeout=#
    Option-File Formatslave-net-timeout
    System Variable Nameslave_net_timeout
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typenumeric
    Default3600
    Min Value1

    The number of seconds to wait for more data from a master/slave connection before aborting the read. Before MySQL 5.1.41, this timeout applies only to TCP/IP connections, not to connections made through Unix socket files, named pipes, or shared memory.

  • slave_skip_errors

    Command-Line Format--slave-skip-errors=name
    Option-File Formatslave-skip-errors
    System Variable Nameslave_skip_errors
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values (>= 5.1.61-ndb-7.0.33,5.1.61-ndb-7.1.22)
    Typestring
    DefaultOFF
    Valid ValuesOFF
    [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.

  • slave_transaction_retries

    Command-Line Format--slave_transaction_retries=#
    Option-File Formatslave_transaction_retries
    System Variable Nameslave_transaction_retries
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Platform Bit Size32
    Typenumeric
    Default10
    Range0 .. 4294967295
     Permitted Values
    Platform Bit Size64
    Typenumeric
    Default10
    Range0 .. 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 NDBCLUSTER's TransactionDeadlockDetectionTimeout or TransactionInactiveTimeout, it automatically retries slave_transaction_retries times before stopping with an error. The default value is 10.

  • slave_type_conversions

    Introduced5.1.44-ndb-6.3.33, 5.1.44-ndb-7.0.14, 5.1.44-ndb-7.1.3
    Command-Line Format--slave_type_conversions=set
    Option-File Formatslave_type_conversions
    System Variable Nameslave_type_conversions
    Variable ScopeGlobal
    Dynamic VariableNo
     Permitted Values
    Typeset
    Default
    Valid ValuesALL_LOSSY
    ALL_NON_LOSSY

    Controls the type conversion mode in effect on the slave when using MySQL Cluster Replication. Its value is a comma-delimited set of zero or more elements from the list: ALL_LOSSY, ALL_NON_LOSSY. 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.

    For additional information on type conversion modes applicable to MySQL Cluster replication attribute promotion and demotion, see Attribute promotion and demotion (MySQL Cluster).

    This variable was added in MySQL Cluster NDB 6.3.33, 7.0.14, and 7.1.3.

  • sql_slave_skip_counter

    System Variable Namesql_slave_skip_counter
    Variable ScopeGlobal
    Dynamic VariableYes
     Permitted Values
    Typenumeric

    The number of events from the master that a slave server should skip.

    Important

    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.6, “SET GLOBAL sql_slave_skip_counter Syntax”.