CHANGE MASTER TO master_def [, master_def] ... master_def = MASTER_HOST = 'host_name' | MASTER_USER = 'user_name' | MASTER_PASSWORD = 'password' | MASTER_PORT = port_num | MASTER_CONNECT_RETRY = count | 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'
Modifie les paramètres que l'esclave utilise pour se
connecter et pour communiquer avec le serveur maître. Les
valeurs possibles pour master_def
sont
présentées ci-dessus.
Les options de log de relais,
RELAY_LOG_FILE
et
RELAY_LOG_POS
, sont disponibles depuis
MySQL 4.0.
Les options SSL, MASTER_SSL
,
MASTER_SSL_CA
,
MASTER_SSL_CAPATH
,
MASTER_SSL_CERT
,
MASTER_SSL_KEY
et
MASTER_SSL_CIPHER
, sont disponibles depuis
MySQL 4.1.1. Vous pouvez changer ces options même sur les
esclaves qui sont compilé sans le support SSL. Elles seront
sauvées dans le fichier master.info
mais
ignorées jusqu'à ce que le support SSL soit activé.
Par exemple :
mysql>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;
mysql>CHANGE MASTER TO
->RELAY_LOG_FILE='slave-relay-bin.006',
->RELAY_LOG_POS=4025;
MASTER_USER
,
MASTER_PASSWORD
,
MASTER_SSL
,
MASTER_SSL_CA
,
MASTER_SSL_CAPATH
,
MASTER_SSL_CERT
,
MASTER_SSL_KEY
, et
MASTER_SSL_CIPHER
sont des informations qui
permettent à l'esclave de se connecter au maître. Si vous
omettez certains paramètres, les paramètres omis
conserveront leur ancienne valeur. Par exemple, si le mot de
passe sur le maître a changé, il suffit de faire :
mysql>STOP SLAVE; -- if replication was running
mysql>CHANGE MASTER TO MASTER_PASSWORD='new3cret';
mysql>START SLAVE; -- if you want to restart replication
pour indiquer à l'esclave le nouveau mot de passe : il n'y a pas besoin de spécifier les informations qui n'ont pas changé, comme l'hôte, le port, l'utilisateur, etc...
MASTER_HOST
, MASTER_PORT
sont le nom d'hôte ou l'adresse IP du maître, et son port
TCP. Notez que si MASTER_HOST
est égal à
localhost
, alors, comme généralement avec
MySQL, le port sera ignoré si les sockets Unix sont
utilisables.
Si vous spécifiez MASTER_HOST
ou
MASTER_PORT
, l'esclave supposera que le
serveur maître est différent du précédent, même si vous
spécifier les mêmes valeurs d'hôte et de port que
précédemment. Dans ce cas, les anciennes valeurs et position
de l'historique binaire ne sont plus valides. Ainsi, si vous
ne spécifiez pas MASTER_LOG_FILE
et
MASTER_LOG_POS
dans la commande,
MASTER_LOG_FILE=''
et
MASTER_LOG_POS=4
sont ajoutés
silencieusement.
MASTER_LOG_FILE
et
MASTER_LOG_POS
sont les coordonnées
auxquelles le thread d'I/O doit commencer à lire chez le
maître, lorsque le thread redémarrera. Si vous spécifiez
l'un d'entre eux, vous ne pourrez pas spécifier
RELAY_LOG_FILE
ou
RELAY_LOG_POS
. Si
MASTER_LOG_FILE
, ni
MASTER_LOG_POS
n'ont été spécifiés,
alors les dernières coordonnées du thread
esclave d'avant la commande CHANGE
MASTER
seront utilisées. Cela assure que la
réplication ne connaît pas de discontinuité, même si le
thread esclave était en retard sur le thread d'I/O, alors que
vous ne voulez changer que le mot de passe. Ce comportement
sécuritaire a été introduit à partir de MySQL versions
4.0.17 et 4.1.1. Avant ces versions, les coordonnées
utilisées celles du thread d'I/O, avant que la commande
CHANGE MASTER
soit émise, ce qui
conduisait à des pertes d'événements au niveau du maître,
et donc, la corruption de la réplication.
CHANGE MASTER
efface tous les
logs de relais (et en démarre de nouveaux), à
moins que vous ne spécifiez l'option
RELAY_LOG_FILE
ou
RELAY_LOG_POS
(dans ce cas, les logs de
relais seront conservés; depuis MySQL 4.1.1 la variable
globale RELAY_LOG_PURGE
sera
automatiquement mise à 0). CHANGE MASTER
TO
modifie master.info
et
relay-log.info
.
CHANGE MASTER
sert à configurer un esclave
lorsque vous avez une sauvegarde du maître, son log et la
position qui correspond à la sauvegarde du maître. Vous
pouvez utiliser la commande CHANGE MASTER TO
MASTER_LOG_FILE='log_name_on_master',
MASTER_LOG_POS=log_offset_on_master
sur l'esclave
après la restauration de la sauvegarde.
Le premier exemple ci-dessus (CHANGE MASTER TO
MASTER_HOST='master2.mycompany.com' etc
) modifie les
coordonnées du maître et de son log binaire. Cela est utile
lorsque vous voulez que l'esclave réplique le maître. Le
second exemple, moins fréquent, sert lorsque l'esclave a des
logs de relais que vous voulez utiliser à nouveau. Pour cela,
le maître n'a pas besoin d'être rejoint : il suffit
d'utiliser la commande CHANGE MASTER TO
et
de lancer le thread SQL START SLAVE
SQL_THREAD
. Vous pouvez même utiliser cela dans une
configuration de réplication, sur un serveur indépendant,
pour assurer la restauration après crash. Supposez que votre
serveur soit planté, et que vous avez restauré la
sauvegarde. Vous voulez que le serveur exécute à nouveau ses
propres logs (non pas des logs de relais, mais ses logs
binaires), qui sont par exemple, stockés sous le nom
myhost-bin.*
. Tout d'abord, faite une
copie des fichiers de log dans un entrepôt, au cas où une
erreur de manipulation surviendrait, et que le serveur vide
ses logs. Si vous utilisez MySQL 4.1.1 ou plus récent,
utilisez la commande suivante pour plus de sécurité :
SET GLOBAL RELAY_LOG_PURGE=0
.
Puis, lancez le serveur sans log-bin
, et
avec un nouvel identifiant (différent du précédent), avec
l'option relay-log=myhost-bin
(pour faire
croire au serveur que ses propres logs sont des logs de
relais), et skip-slave-start
. Puis, envoyez
cette commande :
mysql>CHANGE MASTER TO
->RELAY_LOG_FILE='myhost-bin.153',
->RELAY_LOG_POS=410,
->MASTER_HOST='some_dummy_string';
mysql>START SLAVE SQL_THREAD;
Le serveur va alors lire et exécuter ses propres logs, et rattraper les données jusqu'au crash.
Une fois la restauration finie, faites STOP
SLAVE
, éteignez le serveur, supprimez
master.info
et
relay-log.info
, puis relancez le serveur
avec ses options originales.
Pour le moment, spécifier MASTER_HOST
(même avec une valeur insignifiante) est obligatoire pour que
le serveur pense qu'il est un esclave. Donner au serveur un
nouvel identifiant, différent du précédent, est aussi
obligatoire, car sinon, le serveur va voir des événements
avec son identifiant, et il va conclure que c'est une
réplication circulaire, et il va les ignorer. Dans le futur,
nous envisageons de nous débarasser de ces petites
contraintes.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.