Maison  >  Article  >  base de données  >  Comment implémenter la réplication maître-esclave MySQL sur un hôte Windows ?

Comment implémenter la réplication maître-esclave MySQL sur un hôte Windows ?

亚连
亚连original
2018-05-12 09:22:391870parcourir

La réplication maître-esclave de MySQL est implémentée via les journaux binlog. Le « maître » dans la réplication maître-esclave fait référence à la base de données sur le serveur maître MySQL, et « l'esclave » fait référence au serveur esclave MySQL. .base de données, et ce type de réplication est basé sur le niveau de la base de données. Pour cette raison, le nom de la base de données sur le serveur esclave doit être cohérent avec le nom de la base de données sur le serveur maître. Ensuite, pour réaliser la réplication maître-esclave. au moins deux serveurs MySQL (il est préférable que les deux serveurs MySQL soient situés sur des hôtes différents ou que deux serveurs MySQL soient installés sur un hôte avec des ports différents).

De manière générale, la base de données principale et la base de données esclave de la base de données MySQL sont distribuées sur différents hôtes. Si nous n'avons qu'un seul hôte maintenant et qu'il s'agit d'un système Windows, comment implémenter la réplication maître-esclave de MySQL ? La méthode est la suivante :

Ici, nous introduisons uniquement la méthode de fonctionnement de un maître et un esclave .

Mon ordinateur a installé l'environnement intégré xampp (similaire au package d'installation wamp), et le service MySQL qu'il contient peut être utilisé comme serveur principal de MySQL. Ensuite, nous devons également installer un autre MySQL sur cet ordinateur comme serveur esclave de la base de données.

La version MySQL installée sur mon ordinateur xampp est 5.6.20 et le port est 3306.

Nous devons installer un autre MySQL (il est préférable d'installer la même version ou une version similaire pour éviter les problèmes), et le port est changé en 3307

Paramètres du serveur de base de données :


  • Serveur maître (maître) : l'IP est 127.0.0.1, le port est 3306

  • Esclave : IP est 127.0.0.1, le port est 3307

Serveur maître Configuration :

Modifiez le fichier de configuration de la base de données du serveur principal (E:xamppmysqlbinmy.ini) En bas de la balise [mysqld], ajoutez ce qui suit. code :

#La base de données qui doit être sauvegardée

binlog-do-db=test

#La base de données qui n'a pas besoin d'être sauvegardée up

binlog-ignore-db=mysql

#Activer le journal binaire

log-bin=mysql-bin

#ID du serveur

server-id=1

Enregistrer Quittez et redémarrez le serveur principal MySQL.

binlog-do-db est utilisé pour spécifier la base de données qui doit être synchronisée. binlog-ignore-db spécifie la base de données qui n'a pas besoin d'être synchronisée. Si aucun paramètre n'est défini, l'esclave. Le serveur copiera le serveur maître toutes les bases de données.

Généralement, le compte root n'est pas utilisé pour le compte de synchronisation. Pour cette raison, nous devons créer un nouvel utilisateur sur le serveur principal (tel que user01, le mot de passe est 123456).

Ici, nous le créons en utilisant la ligne de commande. La méthode est la suivante :

Ouvrez cmd, passez à E:xamppmysqlbin. , utilisez le compte root pour vous connecter au serveur principal MySQL :

mysql -uroot -p -P3306

Créer un nouvel utilisateur :

créer l'utilisateur 'user01'@'127.0.0.1' identifié par '123456';

(l'adresse IP après @ L'adresse IP du client autorisé à se connecter.)

Ensuite, configurez les autorisations de réplication maître-esclave pour le nouveau utilisateur :

subvention esclave de réplication sur *.* vers 'user01'@'127.0.0.1' identifié par '123456';

(l'adresse IP après @ est autorisée à se connecter L'adresse IP du client, si elle est changée en '%', cela signifie que le client n'a aucune restriction d'adresse IP)

S'il y a déjà des données dans la base de données du serveur principal (test), nous besoin Copiez d'abord manuellement les données du serveur maître vers le serveur esclave. La méthode est la suivante :

Dans ce cas, nous ne sauvegardons qu'une seule base de données (test). Il y a une table basic_user dans test et il y a déjà des données dans la table. Afin d'éviter que les données du test de la base de données ne soient mises à jour lorsque nous copions les données, nous devons d'abord verrouiller la base de données. La commande est la suivante :

vider les tables avec verrouillage en lecture ;

Cette commande est un verrou de lecture global. Elle ajoutera des verrous de lecture à toutes les bases de données du serveur principal. est la différence entre les verrous en lecture et les verrous en écriture :


  • verrouillage en lecture : également appelé verrouillage partagé, autorise tous les lit l'opération, mais bloque les opérations d'écriture, c'est-à-dire que toutes les connexions ne peuvent lire que des données, mais ne sont pas autorisées à écrire des données.

  • verrouillage en écriture : également appelé verrouillage exclusif, verrouillage exclusif, autorise uniquement la lecture et l'écriture de la connexion actuelle, et n'autorise pas d'autres opérations de lecture et d'écriture simultanées .


Après avoir verrouillé la base de données du serveur maître, nous créons également un test de base de données dans le serveur esclave et mettons toutes les tables (y compris la structure et les données du tableau) sont importés.

Ensuite, nous exécutons la commande suivante pour déverrouiller :

déverrouiller les tables ; 🎜>

Afficher l'état du maître du serveur principal :

mysql> +--------+----------+---------------+ --- ---------------+------------------+

| Position du fichier | | Binlog_Ignore_DB | Exécuté_Gtid_Set |

+------------------+----------+-------- -- ----+------------------+-------------------+

| mysql-bin.000008 | 498 | test mysql +-------------+------------------+- ---------- ----+

Configuration du serveur esclave :

Modifiez le fichier de configuration de la base de données du serveur esclave ( E:mysqlmy.ini), en bas de la balise

[mysqld], ajoutez le code suivant :

#Port

port = 3307

#ID du serveur

server_id = 2

#Activer le journal binaire (le serveur esclave n'a pas besoin d'activer le journal binaire)

log-bin=mysql-bin

Enregistrez et quittez, redémarrez le service MySQL.

Connectez-vous au serveur esclave MySQL :

mysql -uroot -p -P3307

Configurez les paramètres copiés :

changez le maître en master_host='127.0.0.1',master_user='user01',master_password='123456',master_port=3306, master_log_file= 'mysql-bin.000008',master_log_pos=498;

Détails des paramètres :

master_host : IP du maître server
master_user : Le nom d'utilisateur nouvellement créé sur le serveur maître
master_password : Le mot de passe de l'utilisateur
master_port : Le port du serveur maître, s'il n'a pas été modifié, la valeur par défaut suffit.

master_log_file : Le nom du fichier journal binaire du serveur maître, renseignez la valeur du fichier affiché lors de la visualisation de l'état maître du serveur maître

master_log_pos : L'emplacement du journal, renseignez la valeur de Position affichée lors de la visualisation du statut maître du serveur maître

Démarrer la fonction de copie de l'esclave depuis le serveur :

démarrer l'esclave ;

Afficher l'état de l'esclave depuis le serveur :

mysql>

*** *********************** 1. rangée ************* **************** ****

Slave_IO_State : En attente que le maître envoie l'événement

Master_Host : 127.0.0.1

         Utilisateur_maître : utilisateur01

                                                     

Connect_Retry : 60

Master_Log_File : mysql-bin.0 00009

Read_Master_Log_Pos : 120

Relay_Log_File : hp-PC- relay-bin.000004

Relay_Log_Pos : 283

Relay_Master_Log_File : mysql-bin.000009

Slave_IO_Running : Oui

Slave_SQL_Running : Oui

Si les valeurs de Slave_IO_Running et Slave_SQL_Running sont toutes deux Oui, cela signifie que toutes les configurations de réplication maître-esclave ont réussi, c'est-à-dire que le serveur esclave peut automatiquement se synchroniser avec le données de la base de données du serveur maître.

Après cela, tant que les données du serveur principal sont mises à jour (par exemple : une nouvelle table est créée dans la base de données de test ou les données dans la changements de table), du serveur restera automatiquement cohérent avec le serveur principal. Mais si quelqu'un modifie délibérément les données sur le serveur esclave, les données sur le serveur maître ne seront pas mises à jour de manière synchrone à moins que nous configurions les deux serveurs MySQL comme maître-esclave mutuel.
Ce qui précède est ce que j'ai compilé sur l'architecture maître-esclave de la configuration de MySQL dans un environnement fenêtre. Les amis intéressés peuvent l'essayer.

Articles associés :

Installation de mysql-5.7.21 sous Windows

Résumé des connaissances de base de MySQL

navicat pour le téléchargement, l'installation et l'utilisation simple de MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn