« Réplication de bases mysql » : différence entre les versions
(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;