CHANGE MASTER TO
Syntax:
CHANGE MASTER ["connection_name"] TO master_def [, master_def] ... master_def: MASTER_BIND = 'interface_name' | MASTER_HOST = 'host_name' | MASTER_USER = 'user_name' | MASTER_PASSWORD = 'password' | MASTER_PORT = port_num | MASTER_CONNECT_RETRY = interval | MASTER_HEARTBEAT_PERIOD = interval | MASTER_LOG_FILE = 'master_log_name' | MASTER_LOG_POS = master_log_pos | RELAY_LOG_FILE = 'relay_log_name' | RELAY_LOG_POS = relay_log_pos | MASTER_SSL = {0|1} | MASTER_SSL_CA = 'ca_file_name' | MASTER_SSL_CAPATH = 'ca_directory_name' | MASTER_SSL_CERT = 'cert_file_name' | MASTER_SSL_KEY = 'key_file_name' | MASTER_SSL_CIPHER = 'cipher_list' | MASTER_SSL_VERIFY_SERVER_CERT = {0|1} | MASTER_USE_GTID = {current_pos|slave_pos|no}
Description:
CHANGE MASTER
TO changes the parameters that the slave
server uses for connecting to and communicating with the master server. It also
updates the contents of the master.info and relay-log.info files.
MASTER_USER
, MASTER_PASSWORD
,
MASTER_SSL
, MASTER_SSL_CA
,
MASTER_SSL_CAPATH
, MASTER_SSL_CERT
,
MASTER_SSL_KEY
, MASTER_SSL_CIPHER
, and
MASTER_SSL_VERIFY_SERVER_CERT
provide information to the
slave about how to connect to its master.
MASTER_SSL_VERIFY_SERVER_CERT
was added in MySQL 5.1.18. It
is used as described for the --ssl-verify-server-cert
option
in http://dev.mysql.com/doc/refman/5.1/en/ssl-options.html.
MASTER_CONNECT_RETRY
specifies how many seconds to wait
between connect retries. The default is 60. The number of reconnection attempts
is limited by the --master-retry-count
server option; for
more information, see
http://dev.mysql.com/doc/refman/5.1/en/replication-options.html.
The SSL options (MASTER_SSL
,
MASTER_SSL_CA
, MASTER_SSL_CAPATH
,
MASTER_SSL_CERT
, MASTER_SSL_KEY
,
MASTER_SSL_CIPHER
), and
MASTER_SSL_VERIFY_SERVER_CERT
can be changed even on slaves
that are compiled without SSL support. They are saved to the master.info file,
but are ignored unless you use a server that has SSL support enabled.
If you don't specify a given parameter, it keeps its old value, except as indicated in the following discussion. For example, if the password to connect to your MySQL master has changed, you just need to issue these statements to tell the slave about the new password:
STOP SLAVE; -- if replication was running CHANGE MASTER TO MASTER_PASSWORD='new3cret'; START SLAVE; -- if you want to restart replication
There is no need to specify the parameters that do not change (host, port, user, and so forth).
MASTER_HOST
and MASTER_PORT
are the host
name (or IP address) of the master host and its TCP/IP port.
The next two options are available only in MySQL Cluster NDB 6.3 and 6.4; they are not supported in mainline MySQL 5.1:
MASTER_BIND
is for use on replication slaves having multiple network interfaces, and determines which of the slave's network interfaces is chosen for connecting to the master. It is also possible to determine which network interface is to be used in such cases by starting the slave mysqld process with the--master-bind option
.
The ability to bind a replication slave to specific network interface was added in MySQL Cluster NDB 6.3.4.MASTER_HEARTBEAT_PERIOD
is used to set the interval in seconds between replication heartbeats. Whenever the master's binary log is updated with an event, the waiting period for the next heartbeat is reset. interval is a decimal value having the range 0 to 4294967 seconds and a resolution to hundredths of a second; the smallest nonzero value is 0.001. Heartbeats are sent by the master only if there are no unsent events in the binlog file for a period longer than interval.
Setting interval to 0 disables heartbeats altogether. The default value for interval is equal to the value of slave_net_timeout divided by 2.
Note: Setting @@global.slave_net_timeout to a value less than that of the current heartbeat interval results in a warning being issued.
IssuingRESET SLAVE
resets the heartbeat interval to the default.MASTER_HEARTBEAT_PERIOD
was added in MySQL Cluster NDB 6.3.4.
Note: Replication cannot use Unix socket files. You must be able to connect to the master MySQL server using TCP/IP.
If you specify MASTER_HOST
or
MASTER_PORT
, the slave assumes that the master server is
different from before (even if you specify a host or port value that is the
same as the current value.) In this case, the old values for the master binary
log name and position are considered no longer applicable, so if you do not
specify MASTER_LOG_FILE
and
MASTER_LOG_POS
in the statement,
MASTER_LOG_FILE=''
and MASTER_LOG_POS=4
are silently appended to it.
Setting MASTER_HOST=''
— that is,
setting its value explicitly to an empty string — is
not the same as not setting it at all. Setting this option to an empty string
causes START SLAVE
subsequently to fail. This issue is
addressed in MySQL 6.0. (MySQL Bug #28796)
MASTER_LOG_FILE
and MASTER_LOG_POS
are
the coordinates at which the slave I/O thread should begin reading from the
master the next time the thread starts. If you specify either of them, you
cannot specify RELAY_LOG_FILE
or
RELAY_LOG_POS
. If neither of
MASTER_LOG_FILE
or MASTER_LOG_POS
are
specified, the slave uses the last coordinates of the slave SQL thread before
CHANGE MASTER TO
was issued. This ensures that there is no
discontinuity in replication, even if the slave SQL thread was late compared to
the slave I/O thread, when you merely want to change, say, the password to use.
CHANGE MASTER TO
deletes all relay log files and starts a
new one, unless you specify RELAY_LOG_FILE
or
RELAY_LOG_POS
. In that case, relay logs are kept; the
relay_log_purge global variable is set silently to 0.
CHANGE MASTER TO
is useful for setting up a slave when you
have the snapshot of the master and have recorded the log and the offset
corresponding to it. After loading the snapshot into the slave, you can run
CHANGE MASTER TO MASTER_LOG_FILE='log_name_on_master'
,
MASTER_LOG_POS=log_offset_on_master
on the slave.
The following example changes the master and master's binary log coordinates. This is used when you want to set up the slave to replicate the master:
CHANGE MASTER TO MASTER_HOST='master2.mycompany.com', MASTER_USER='replication', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306, MASTER_LOG_FILE='master2-bin.001', MASTER_LOG_POS=4, MASTER_CONNECT_RETRY=10;
The next example shows an operation that is less frequently employed. It is
used when the slave has relay logs that you want it to execute again for some
reason. To do this, the master need not be reachable. You need only use
CHANGE MASTER TO
and start the SQL thread
(START SLAVE SQL_THREAD
):
CHANGE MASTER TO RELAY_LOG_FILE='slave-relay-bin.006', RELAY_LOG_POS=4025;
MariaDB starting with 10.0.2
From version 10.0.2, MariaDB supports Global Transaction ID's. The MASTER_USE_GTID configures the slave to use global transaction ID when connecting to a master. See Global Transaction ID for details.
CHANGE MASTER TO MASTER_USE_GTID = current_pos