22
0
Fork 0

améliorations

This commit is contained in:
gcolpart 2017-01-11 23:20:39 +01:00
parent 8f6c578778
commit 31c77a265f
1 changed files with 42 additions and 17 deletions

View File

@ -22,7 +22,7 @@ Il faut :
Il faut également :
* 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) ;
* activer les [binlogs](/HowtoMySQL#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 sur le serveur MASTER : `GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'PASSWORD';`.
@ -66,25 +66,15 @@ Pour éviter que la réplication démarre automatiquement au démarrage, on ajou
skip-slave-start
~~~
## Trucs et astuces pour la réplication MySQL
**Astuce 1** : Une astuce parfois très utile est la possibilité d'exécuter des requêtes qui ne seront pas prises en compte
par le binlog (et donc non répliquée !). Cela nécessite le droit SUPER :
**Astuce très utile** : pour effectuer des requêtes non prises en compte par la réplication, une astuce est d'utiliser interactivement `SET sql_log_bin` ce qui n'écrira pas les requêtes SQL suivantes dans le binlog du serveur (et elles ne seront donc pas répliquées au serveur SLAVE) :
~~~
mysql> SET sql_log_bin = 0;
~~~
**Astuce 2** : Pour divers raisons (notamment la réplication de données déjà répliquées !), on devra activer l'option
suivante :
> *Note* : cela nécessite le droit MySQL _SUPER_
~~~{.ini}
[mysqld]
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
@ -101,11 +91,15 @@ master-password = PASSWORD
#master-port = 3306
#master-connect-retry = 60
#master-info-file = master.info
#slave_compressed_protocol=1
#log-slave-updates
~~~
> *Note* : En cas d'une bande passante réduite, l'option *slave_compressed_protocol* permet une compression des données côté MASTER et décompression des données côté SLAVE (cela consomme évidemment davantage de ressources CPU).
### 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 d'avoir une réplication peut être de ne pas écrire toutes les requêtes dans les [binlogs](/HowtoMySQL#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.
@ -140,16 +134,47 @@ replicate-do-table = foo.qux
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
### 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.
On conseille également de :
- positionner la directive `auto-increment-increment = 10` sur chaque serveur
- positionner la directive `auto-increment-offset` avec une valeur numérique différente sur chaque serveur
- positionner la directive `auto-increment-offset` avec une valeur numérique différente sur chaque serveur (par exemple
Exemple : `auto-increment-offset 2` sur l'un des deux serveurs
### Réplications en chaîne
La règle de base de la réplication MySQL est : **un serveur SLAVE ne peut avoir qu'un seul MASTER**.
Cela n'empêche pas d'avoir plusieurs serveurs SLAVE pour un serveur MASTER. Et les serveurs SLAVE peuvent également être MASTER de plusieurs serveurs SLAVES... ce qui permet de faire des chaînes complexes de réplications.
Exemple avec 3 serveurs MASTER/MASTER/MASTER :
~~~
Serveur A -> Serveur B -> Serveur C [-> Serveur A]
~~~
Exemple avec de nombreux serveurs :
~~~
Serveur A <-> Serveur B
\ \
\--> Serveur C \--> Serveur F
\--> Serveur D \--> Serveur G
\--> Serveur E \---> Serveur H
\
\--> Serveur I
\--> Serveur J
~~~
Dans ces cas, il est important d'activer l'option *log-slave-updates* permettait de générer des binlogs à partir des données reçues via la réplication et permettre ainsi d'être MASTER et transmettre ces données à un autre serveur SLAVE :
~~~{.ini}
[mysqld]
log-slave-updates
~~~
## Résolution des erreurs lors de la réplication