« Réplication de bases mysql » : différence entre les versions
Aucun résumé des modifications |
|||
(7 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Catégorie:Sauvegardes]] | |||
== Avant de commencer == | == Avant de commencer == | ||
Ligne 15 : | Ligne 17 : | ||
mysql> REPLICATION SLAVE ON *.* TO 'dbsave'@'0.0.0.2' IDENTIFIED BY 'mdp'; | mysql> REPLICATION SLAVE ON *.* TO 'dbsave'@'0.0.0.2' IDENTIFIED BY 'mdp'; | ||
<br/> | <br/> | ||
---- | |||
Modifiez la configuration de mysql par l'édition du fichier /etc/mysql/my.cnf<br/> | Modifiez la configuration de mysql par l'édition du fichier /etc/mysql/my.cnf<br/> | ||
<br/> | <br/> | ||
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.<br/> | ''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.''<br/> | ||
<br/> | <br/> | ||
Sous [mysqld]<br/> | Sous [mysqld]<br/> | ||
Ligne 28 : | Ligne 33 : | ||
binlog_do_db = wikidb | binlog_do_db = wikidb | ||
<br/> | <br/> | ||
Avec donc la base du wiki, wikidb, que nous souhaitons | Avec donc la base du wiki, wikidb, que nous souhaitons sauvegarder.<br/> | ||
<br/> | <br/> | ||
Nous allons d'ailleurs l'envoyer sur le serveur esclave | Nous allons d'ailleurs l'envoyer sur le serveur esclave après avoir redémarré le service.<br/> | ||
service mysql restart | service mysql restart | ||
---- | |||
<br/> | <br/> | ||
Reconnectez vous à mysql pour arrêter l'écriture dans les base et vérifiez où en sont les logs du binaire:<br/> | Reconnectez vous à mysql pour arrêter l'écriture dans les base et vérifiez où en sont les logs du binaire:<br/> | ||
Ligne 51 : | Ligne 59 : | ||
<br/><br/> | <br/><br/> | ||
== | == Sur 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/> | ||
Ligne 70 : | Ligne 78 : | ||
mysql> FLUSH TABLES WITH READ LOCK; | mysql> FLUSH TABLES WITH READ LOCK; | ||
<br/> | <br/> | ||
On injecte la base à | On injecte la base à jour provenant du maitre:<br/> | ||
mysql -p wikidb < wikidb_1.sql | mysql -p wikidb < wikidb_1.sql | ||
<br/> | <br/> | ||
Sous mysql on indique l'état des enregistrements du maitre récupérés plus tôt, on libère les | Sous mysql on indique l'état des enregistrements du maitre récupérés plus tôt, on libère les bases (sur le maitre aussi) et enfin on lance la réplication: | ||
mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000217', MASTER_LOG_POS=112188; | mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000217', MASTER_LOG_POS=112188; | ||
mysql> UNLOCK TABLES; (a faire aussi sur le maitre) | mysql> UNLOCK TABLES; (a faire aussi sur le maitre) | ||
mysql> START SLAVE; | mysql> START SLAVE; | ||
== Erreurs rencontrées == | |||
Pour observer l'état de la réplication ,dans mysql, sur le serveur esclave, entrez la commande: | |||
mysql> SHOW SLAVE STATUS; | |||
S'il n'y a pas d'erreur, tout est ok. | |||
=== impossible de se connecter depuis l'esclave === | |||
* vérifier que vous pouvez vous connecter sur le port mysql (avec un telnet par exemple) | |||
* que vous pouvez vous connecter au mysql du serveur maitre depuis l'esclave (option -h 0.0.0.1) | |||
* que dans la configuration du maitre la ligne commençant par bind-adress est bien commentée |
Dernière version du 21 mars 2012 à 08:40
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 sauvegarder.
Nous allons d'ailleurs l'envoyer sur le serveur esclave après avoir redémarré 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
Sur 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 à jour 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 bases (sur le maitre 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;
Erreurs rencontrées
Pour observer l'état de la réplication ,dans mysql, sur le serveur esclave, entrez la commande:
mysql> SHOW SLAVE STATUS;
S'il n'y a pas d'erreur, tout est ok.
impossible de se connecter depuis l'esclave
- vérifier que vous pouvez vous connecter sur le port mysql (avec un telnet par exemple)
- que vous pouvez vous connecter au mysql du serveur maitre depuis l'esclave (option -h 0.0.0.1)
- que dans la configuration du maitre la ligne commençant par bind-adress est bien commentée