« Réplication de bases mysql » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
(Page créée avec « == Avant de commencer == Vous avez donc, sur deux serveurs différents, le service mysql de paramétré et fonctionnel. La réplication est asynchrone c'est à dire que l... »)
 
Aucun résumé des modifications
Ligne 8 : Ligne 8 :
<br/><br/>
<br/><br/>


== Serveur Maitre ==
== Sur le Serveur Maitre ==


Connectez vous sur la base du serveur maitre:
Connectez vous sur la base du serveur maitre:
Ligne 51 : Ligne 51 :
<br/><br/>
<br/><br/>


== Serveur esclave ==
== Sure le Serveur esclave ==
On commence par modifier la config puis on redémarre mysql.<br/>
On commence par modifier la config puis on redémarre mysql.<br/>
L'important est d'avoir un id différent.<br/>
L'important est d'avoir un id différent.<br/>

Version du 18 mars 2012 à 11:54

Avant de commencer

Vous avez donc, sur deux serveurs différents, le service mysql de paramétré et fonctionnel. La réplication est asynchrone c'est à dire que l'un des serveur sera maitre et l'autre esclave. Il ne faudra pas modifier la base de l'esclave une fois la réplication fonctionnelle.

Nous prendrons le cas du wiki comme exemple. Partons du principe qu'il est installé sur le serveur maitre (IP 0.0.0.1) et qu'on veut une copie de sa base sur le serveur esclave (IP 0.0.0.2).



Sur le Serveur Maitre

Connectez vous sur la base du serveur maitre:

mysql -p

Créez un utilisateur qui pourra se connecter depuis l'esclave pour faire la réplication (avec utilisateur:dbsave, mot de passe:mdp)

mysql> REPLICATION SLAVE ON *.* TO 'dbsave'@'0.0.0.2' IDENTIFIED BY 'mdp';


Modifiez la configuration de mysql par l'édition du fichier /etc/mysql/my.cnf

Notez au passage que votre serveur esclave se connectera par defaut sur le port 3306. Vous pouvez donc en profiter si vous souhaitez changer de port. Dans tous les cas veillez à ce que ce port soit ouvert pour les connections entrante, au moins pour votre serveur esclave.

Sous [mysqld]
Si ce n'est pas le cas, commentez la ligne commençant pas bind-adress.
Au contraire décommentez ou ajoutez les lignes:

server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
binlog_do_db            = wikidb


Avec donc la base du wiki, wikidb, que nous souhaitons sauvegardé.

Nous allons d'ailleurs l'envoyer sur le serveur esclave aprés avoir redémarrer le service.

service mysql restart


Reconnectez vous à mysql pour arrêter l'écriture dans les base et vérifiez où en sont les logs du binaire:

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000217 |   112188 | wikidb       |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


Sortez de mysql pour extraire la base qui nous intéresse:

 mysqldump -u root -p wikidb > wikidb_1.sql


Envoyez là sur votre serveur esclave:

 scp ./wikidb_1.sql root@0.0.0.2:/root



Sure le Serveur esclave

On commence par modifier la config puis on redémarre mysql.
L'important est d'avoir un id différent.

server-id               = 2
#log_bin                        = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
master-host = 0.0.0.1
master-user = dbsave
master-password = mdp
master-port = 3306
slave-skip-errors = 1062
replicate-do-db = wikidb
#binlog_do_db           = include_database_name
#binlog_ignore_db       = include_database_name


Sous mysql on stoppe l'écriture:

mysql> FLUSH TABLES WITH READ LOCK;


On injecte la base à jours provenant du maitre:
mysql -p wikidb < wikidb_1.sql
Sous mysql on indique l'état des enregistrements du maitre récupérés plus tôt, on libère les base (sur le maire aussi) et enfin on lance la réplication:

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000217', MASTER_LOG_POS=112188;
mysql> UNLOCK TABLES; (a faire aussi sur le maitre)
mysql> START SLAVE;