diff --git a/HowtoMySQL/Replication.md b/HowtoMySQL/Replication.md index b704b4c8..340d32e9 100644 --- a/HowtoMySQL/Replication.md +++ b/HowtoMySQL/Replication.md @@ -21,10 +21,10 @@ Il faut : Il faut également : -* autoriser les connexions MySQL distantes ; -* activer les logs binaires sur chaque serveur : _log_bin mixed_ ; +* autoriser la connexion du serveur MySQL SLAVE vers le serveur MASTER ; +* activer les [binlogs](/HowtoMySQL#gestion-des-binlogs) sur le serveur MASTER (on conseille le type _mixed_ en général) ; * positionner un _server-id_ différent sur chaque serveur (ne pas utiliser 0) ; -* créer un utilisateur dédié pour la réplication : `GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'PASSWORD';`. +* créer un utilisateur dédié pour la réplication sur le serveur MASTER : `GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'PASSWORD';`. ## Activation d'une réplication MASTER/SLAVE @@ -37,22 +37,15 @@ Sur le serveur SLAVE, exécuter : ~~~ mysql> CHANGE MASTER TO - MASTER_HOST='$MASTER_IP', + MASTER_HOST='192.168.0.33', MASTER_USER='repl', - MASTER_PASSWORD='XXX', + MASTER_PASSWORD='PASSWORD', MASTER_LOG_FILE='mysql-bin.NNNNNN', MASTER_LOG_POS=NNN; ~~~ /!\\ **Bien que non obligatoire, on recommande de toujours indiquer les directives *MASTER_LOG_FILE* et *MASTER_LOG_POS* pour éviter des problèmes** -Pour exclure une base de la réplication : - -~~~{.ini} -[mysqld] -binlog-ignore-db = mysql -~~~ - Puis démarrer la réplication sur le serveur B avec la commande : `START SLAVE`. Enfin, exécuter `SHOW SLAVE STATUS` pour vérifier le bon fonctionnement. @@ -93,6 +86,60 @@ log-slave-updates **Astuce 3** : Sauter une requête déjà présente dans les binlog sur le slave (à tester) : +## Configuration avancée + + + +### Configuration de la réplication via fichier de configuration + +La configuration d'une réplication via la commande `CHANGE MASTER TO […]` est persistente, elle est notamment conservée en cas de redémarrage de MySQL car conservée dans le fichier `master.info` situé par défaut dans le datadir (**y compris le mot de passe en clair !**). Nous conseillons cette méthode, mais on peut également configurer via la configuration de MySQL ainsi : + +~~~{.ini} +master-host = 192.0.2.33 +master-user = repl +master-password = PASSWORD +#master-port = 3306 +#master-connect-retry = 60 +#master-info-file = master.info +~~~ + +### Configuration d'une réplication partielle + +Une manière d'avoir une réplication peut être de ne pas écrire toutes les requêtes dans les [binlogs](/HowtoMySQL#gestion-des-binlogs) sur le serveur MASTER via les options *binlog_do_db*/*binlog_ignore_db* mais ce n'est pas conseillé car les binlogs ont souvent d'autres utilités (vérifier les requêtes, ou servir pour d'autres serveurs SLAVE). + +Une manière différente (ou complémentaire) est d'utiliser les directives *replicate-do-db*/*replicate-ignore-db*/*replicate-do-table*/*replicate-ignore-table*/*replicate-wild-do-table*/*replicate-wild-ignore-table* sur le serveur SLAVE. + +/!\\ Ces directives ne sont pas parfaites, notamment les requêtes « croisées » du type `USE foo; UPDATE bar.baz SET […]` ne seront pas comprises, ce qui peut poser des problèmes ! + +Pour ignorer les requêtes concernant la base _mysql_ : + +~~~{.ini} +[mysqld] +replicate-ignore-db = mysql +~~~ + +Pour n'inclure que les requêtes concernant les bases _foo_ et _bar_ : + +~~~{.ini} +[mysqld] +replicate-do-db = foo +replicate-do-db = bar +~~~ + +Pour n'inclure que les requêtes concernant les tables _foo.baz_ et _foo.qux_ : + +~~~{.ini} +[mysqld] +replicate-do-db = foo +replicate-do-table = foo.baz +replicate-do-table = foo.qux +~~~ + +/!\\ **On conseille de toujours utiliser *replicate-do-db* en complément de *replicate-do-table*/*replicate-wild-do-table* sinon les requêtes non spécifiques aux tables ne sont pas filtrées (…par exemple les DROP DATABASE venant du serveur MASTER !!)** + +Les directives *replicate-wild-do-table*/*replicate-wild-ignore-table* permettent d'utiliser des expressions régulières avec `%` et `_` (comme pour l'opérateur SQL _LIKE_). + + ## Réplication MASTER/MASTER Pour une réplication MASTER/MASTER, il faut simplement activer deux réplications MASTER/SLAVE entre les deux serveurs concernés.