18
0
Fork 0

Ajout d'infos

This commit is contained in:
gcolpart 2017-01-11 22:43:16 +01:00
parent d7381a68c7
commit 8f6c578778
1 changed files with 59 additions and 12 deletions

View File

@ -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) :
<https://stackoverflow.com/questions/17701524/mysql-replication-skip-statement-is-it-possible>
## Configuration avancée
<https://dev.mysql.com/doc/refman/5.6/en/replication-options-slave.html>
### 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.