Maison >base de données >tutoriel mysql >Solutions de migration MySQL dans différentes circonstances (recommandé)
MySQL La migration est une tâche de maintenance quotidienne de DBA. La migration, dans son sens originel, n'est rien d'autre que la suppression d'un objet réellement existant pour garantir l'intégrité et la continuité de l'objet. Tout comme sur la douce plage, deux enfants innocents ont déplacé un tas de sable vers d'autres endroits pour construire le château de leur cœur.
Dans l'environnement de production, un travail de migration est requis dans les situations suivantes :
Espace disque insuffisant. Par exemple, dans certains projets anciens, les modèles sélectionnés ne conviennent pas forcément à la base de données. Au fil du temps, les disques durs risquent de devenir rares
Des goulots d'étranglement commerciaux se produiront. Par exemple, dans le projet, une seule machine est utilisée pour assurer tous les services de lecture et d'écriture, ce qui augmente la pression sur l'entreprise et la dépasse. Si la pression IO est dans une plage acceptable, une solution de séparation lecture-écriture sera adoptée
La machine a un goulot d'étranglement ; Les principaux goulots d'étranglement de la machine sont les capacités d'E/S du disque, la mémoire et le processeur. En plus d'optimiser les goulots d'étranglement, la migration est une bonne solution
transformation de projet. Les bases de données de certains projets s'étendent sur des salles informatiques, et des nœuds peuvent être ajoutés dans différentes salles informatiques, ou des machines peuvent être déplacées d'une salle informatique à une autre. Autre exemple, si différentes entreprises partagent le même serveur, une migration sera effectuée afin de soulager la pression sur le serveur et de faciliter la maintenance.
En un mot, la migration est un dernier recours. Le but de la mise en œuvre du travail de migration est d’assurer le bon fonctionnement et la continuité de l’entreprise.
La migration MySQL n'est rien de plus que de contourner les données, puis de continuer à s'étendre, ce n'est rien de plus qu'une sauvegarde et une restauration dans le but d'assurer la fonctionnement fluide et continu de l’entreprise. Le problème est de savoir comment effectuer une sauvegarde et une restauration rapidement et en toute sécurité.
D'une part, la sauvegarde. Il existe une sauvegarde pour le nœud esclave ou le nœud de secours de chaque nœud maître. Cette sauvegarde peut être une sauvegarde complète ou une sauvegarde incrémentielle. La méthode de sauvegarde en ligne peut consister à utiliser mysqldump, xtrabackup ou mydumper. Pour la sauvegarde de bases de données de petite capacité (moins de 10 Go), nous pouvons utiliser mysqldump. Mais pour les bases de données de grande capacité (niveau centaines de Go ou To), nous ne pouvons pas utiliser la sauvegarde mysqldump. D'une part, des verrous seront générés, d'autre part, cela prendra trop de temps. Dans ce cas, vous pouvez choisir xtrabackup ou copier directement le répertoire de données. Copiez directement la méthode du répertoire de données. Vous pouvez utiliser rsync pour transférer entre différentes machines. La consommation de temps dépend du réseau. En utilisant xtrabackup, le temps est principalement consacré à la sauvegarde et à la transmission réseau. Si vous disposez d'un fichier de sauvegarde de bibliothèque complet ou spécifié, c'est le meilleur moyen d'obtenir la sauvegarde. Si la base de données de secours peut tolérer l'arrêt du service, la copie directe du répertoire de données est la méthode la plus rapide. Si la base de données de secours ne permet pas d'arrêter le service, on peut utiliser xtrabackup (qui ne verrouille pas la table InnoDB), qui est le meilleur compromis pour réaliser la sauvegarde.
Par contre, la récupération. Pour les fichiers de sauvegarde de bases de données de petite capacité (moins de 10 Go), nous pouvons les importer directement. Pour la récupération de bases de données de grande capacité (niveau de centaines de Go ou de To), la récupération n'est pas difficile après avoir transféré les fichiers de sauvegarde sur la machine locale. Pour les méthodes de récupération spécifiques, veuillez vous référer à la section 4.
Après avoir compris pourquoi nous devons migrer et comment le faire, examinons le fonctionnement de l'environnement de production. Différents scénarios d'application ont des solutions différentes.
Avant de lire le combat réel spécifique, il est supposé que le lecteur a l'accord suivant :
Afin de protéger la confidentialité, l'adresse IP du serveur et d'autres informations contenues dans ce l'article a été traité ;
Si le serveur est dans la même salle informatique, utilisez le segment D de l'IP du serveur au lieu de l'IP spécifique, veuillez vous référer au <.>Architecture schéma ;
La méthode est donnée pour chaque scénario, mais les commandes à exécuter à chaque étape ne seront pas données en détail, car d'une part, cela rendrait l'article trop long ; par contre, je pense que tant que vous connaissez la méthode, La méthode spécifique viendra à vous, et cela ne dépend que du degré de connaissance et de la capacité à obtenir des informations
; Veuillez vous référer à la section 5 pour les précautions pendant le combat réel.
3.1 Scénario 1 Migration d'une structure maître et une structure esclave depuis la bibliothèque
En suivant l'idée de facile à difficile, nous commençons par un simple structure. Le projet A était à l’origine une structure maître-esclave. 101 est le nœud maître et 102 est le nœud esclave. En raison des besoins de l'entreprise, 102 a été migré à partir du nœud 103. Le diagramme d'architecture est présenté dans la figure 1. 102 La capacité de données du nœud esclave est trop grande et ne peut pas être sauvegardée à l'aide de mysqldump. Après communication avec R&D, un plan cohérent est formé.
Figure 1 schéma d'architecture de la bibliothèque esclave de migration de structure maître-esclave
La méthode spécifique est la suivante :
La R&D sera 102 L'activité de lecture est coupée dans la base de données principale ;
Confirmez l'état 102 de MySQL (regardez principalement la LISTE DES PROCESSUS), observez le trafic de la machine, et après avoir confirmé qu'il est correct, arrêtez le service du nœud esclave 102 ;
103 Créez une nouvelle instance MySQL une fois construite, arrêtez le service MySQL et copiez l'intégralité du répertoire de données mv vers d'autres endroits pour la sauvegarde ;
Déplacez l'intégralité des données mysql de 102 Utilisez rsync pour copier le répertoire vers 103
Pendant la copie, autorisez 101 pour que 103 ait le autorisation d'extraire le binlog (REPLICATION SLAVE, REPLICATION CLIENT);
Une fois la copie terminée, modifiez le server_id dans 103 fichier de configuration, veillez à ne pas être cohérent avec celui sur 102 ;
Démarrez l'instance MySQL en 103, veuillez noter le chemin du fichier de données dans le fichier de configuration et les autorisations du répertoire de données
Entrez dans l'instance MySQL 103, utilisez SHOW SLAVE STATUS pour vérifier l'état de l'esclave, et vous pouvez voir que Seconds_Behind_Master décrémente
Après que Seconds_Behind_Master devienne 0, cela signifie la synchronisation ; est terminé. À ce stade, vous pouvez utiliser pt-table-checksum pour vérifier que les données de 101 et 103 sont cohérentes, mais cela prend du temps et a un impact sur le nœud maître. Il peut être utilisé avec le développement Vérifier les données. cohérence ensemble ;
Communiquer avec R&D En plus de vérifier la cohérence des données, vous devez également vérifier les autorisations du compte pour éviter les erreurs d'accès après le déplacement de l'entreprise
Après avoir terminé les étapes ci-dessus, vous pouvez vous coordonner avec R&D pour faire passer une partie de l'activité de lecture de 101 à 103 et observer le statut de l'entreprise
S'il n'y en a pas ; problème avec l'entreprise, prouver que la migration a réussi.
3.2 Scénario 2 : Une structure maître et une structure esclave pour migrer la bibliothèque spécifiée
Après avoir su migrer uniquement la bibliothèque esclave avec un maître et un esclave, puis voyons comment migrer les nœuds maître et esclave en même temps. Étant donné que différentes entreprises accèdent au même serveur en même temps, la pression sur une seule bibliothèque est trop élevée et peu pratique à gérer. Par conséquent, il est prévu de migrer simultanément le nœud maître 101 et le nœud esclave 102 vers les nouvelles machines 103 et 104, 103 agissant en tant que nœud maître et 104 en tant que nœud esclave. Le schéma d'architecture est représenté sur la figure. 2. Cette migration nécessite uniquement la migration des bibliothèques spécifiées. La capacité de ces bibliothèques n'est pas trop grande et peut garantir que les données ne sont pas en temps réel.
Figure 21 Schéma d'architecture de bibliothèque spécifié pour la migration de la structure maître-un-esclave
La méthode spécifique est la suivante :
103 et 104 Créez une nouvelle instance et établissez une relation maître-esclave. À ce moment, le nœud maître et les nœuds esclaves sont déchargés
102 Pour exporter des données, la bonne méthode est de : configurer les tâches planifiées et exporter pendant les faibles pics d'activité Opération, le choix ici est mysqldump
102 Collectez les comptes et les autorisations requis pour la bibliothèque spécifiée
102 L'exportation des données est terminée, utilisez rsync Transfer vers 103, effectuez une opération de compression si nécessaire
103 importez les données, à ce moment les données seront automatiquement synchronisées avec 104, surveillez ; état du serveur et état MySQL ;
L'importation 103 est terminée, la synchronisation 104 est terminée, 103 est autorisée selon le compte collecté par 102. Une fois terminé, le R&D sera informé pour vérifier le autorisations de données et de compte ;
Une fois ce qui précède terminé, la collaboration R&D peut être, migrer l'activité de 101 et 102 vers 103 et 104 et observer le statut de l'entreprise
S'il n'y a aucun problème avec l'entreprise, la migration est réussie.
3.3 Scénario 3 Migration bilatérale de bibliothèques désignées avec une structure maître et une structure esclave
Voyons ensuite comment migrer bilatéralement des bibliothèques désignées avec une structure maître et une structure esclave. C'est aussi à cause du partage des services que le serveur est soumis à une forte pression et que la gestion est chaotique. Par conséquent, il est prévu de migrer simultanément le nœud maître 101 et le nœud esclave 102 vers les nouvelles machines 103, 104, 105 et 106, qui feront office de nœud maître de 104, et 104 feront office de nœud esclave. de 103, 105 fera office de nœud maître de 106 et 106 fera office de nœud maître de 105. À partir du nœud, le diagramme d'architecture est présenté à la figure 3. Cette migration nécessite uniquement la migration des bibliothèques spécifiées. La capacité de ces bibliothèques n'est pas trop grande et peut garantir que les données ne sont pas en temps réel. Nous pouvons voir que cette migration est très similaire au scénario 2, sauf qu’elle est migrée deux fois.
Figure 3. Migration bilatérale d'une structure maître et d'une structure esclave du diagramme d'architecture de bibliothèque spécifié
La méthode spécifique est la suivante :
103 et 104 Créez une nouvelle instance et établissez une relation maître-esclave à ce moment, le nœud maître et les nœuds esclaves sont déchargés
102 Exportez les données de bibliothèque spécifiées requises ; par 103. La bonne façon est de configurer les tâches planifiées. Pour effectuer des opérations d'exportation pendant les faibles pics d'activité, mysqldump est sélectionné ici
102 Collectez le compte et les autorisations requis pour la bibliothèque spécifiée requise ; par 103 ;
102 Exportez les données de bibliothèque spécifiées requises par 103. Utilisez rsync pour transférer vers 103 et effectuez une opération de compression si nécessaire ; 103 importer les données. À ce moment, les données seront automatiquement synchronisées avec 104. Surveiller l'état du serveur et l'état de MySQL ;
103 Importation terminée, 104 Synchronisation terminée, 103 autorisée en fonction du compte collecté par 102, une fois terminé, informez R&D pour vérifier les données et les autorisations du compte
Une fois ce qui précède terminé, collaborez avec R&D pour migrer l'activité de 101 et 102 vers 103 et 104 ; , et observez l'état de l'entreprise ;
Créez de nouvelles instances de 105 et 106 et construisez une relation maître-esclave, le nœud maître et le nœud esclave ne sont pas chargés en ce moment
Figure 41 Schéma d'architecture maître-esclave de migration complète de la structure maître-esclave
La méthode spécifique est la suivante : R&D Coupez l'activité de lecture de 102 dans la base de données principale
Une fois la copie terminée, modifiez le server_id dans le fichier de configuration 104, attention à ne pas être cohérent avec celui du 102
Démarrez le Instance MySQL en 104, faites attention au fichier de configuration Le chemin du fichier de données et les autorisations du répertoire de données
Entrez l'instance MySQL 104, utilisez SHOW SLAVE STATUS pour vérifier l'esclave ; status, et vous pouvez voir que Seconds_Behind_Master décrémente
Après que Seconds_Behind_Master devient 0, cela signifie que la synchronisation est terminée. À ce moment, vous pouvez utiliser pt-table-checksum pour vérifier que le les données de 101 et 104 sont cohérentes, mais cela prend du temps et a un impact sur le nœud maître Cela peut être fait en même temps que le développement
De plus. pour la vérification de la cohérence des données, les autorisations du compte doivent également être vérifiées pour éviter les erreurs d'accès après la migration de l'entreprise
Collaborer avec la R&D pour faire passer l'activité de lecture du nœud esclave 102 précédent à 104 ; 🎜>
Figure 5 Schéma d'architecture de migration entre salles de machines à structure double primaire
La méthode spécifique est la suivante : 1.103 et 1.104 nouvelles instances, établissez une relation maître-esclave à ce moment, le nœud maître et le nœud esclave sont sans charge
Entrez dans l'instance MySQL 1.103, utilisez SHOW SLAVE STATUS pour vérifier l'état de l'esclave, vous pouvez voir que Seconds_Behind_Master décrémente
Après que Seconds_Behind_Master devienne 0, cela signifie que la synchronisation est terminée. À ce stade, vous pouvez utiliser pt-table-checksum pour vérifier que les données de 1.101 et 1.103 sont cohérentes, mais cela prend du temps et a un impact sur le nœud maître. avec le développement ;
Nous utilisons la même méthode pour transformer 1.104 en une bibliothèque esclave de
Communiquer avec R&D ; vérification de la cohérence des données, les autorisations du compte doivent également être vérifiées afin d'éviter les erreurs d'accès après la migration de l'entreprise
À l'heure actuelle, ce que nous devons faire est de transformer la 1.103 en bibliothèque esclave ; de 2.101. Pour des méthodes spécifiques, veuillez vous référer au scénario quatre
Il convient de noter que la configuration des nombres impairs et pairs de 1.103 doit être cohérente avec 1.101 ; >
Regardons ensuite la preuve de migration multi-instance entre salles informatiques . Pour la relation d'instance de chaque machine, on peut se référer à la figure 6. Le but de cette migration est d'effectuer une réparation des données. Créez les instances 7938 et 7939 sur 2.117 pour remplacer les instances précédentes par des données anormales. Pour des raisons commerciales, certaines bibliothèques ne sont écrites qu'à l'emplacement A, et certaines bibliothèques ne sont écrites qu'à l'emplacement B, il existe donc une situation de filtrage synchrone.
Figure 6 Schéma d'architecture de migration multi-instance entre salle des machines
La méthode spécifique est la suivante :
N'oubliez pas de définir innodb_file_per_table sur 1 pour l'instance nouvellement créée, car ce paramètre était 0 dans l'instance précédente, ibdata1 était trop volumineux et la sauvegarde et la transmission prenaient beaucoup de temps. de temps ;
Lorsque vous utilisez gzip pour compresser des données, veuillez noter qu'une fois la compression terminée, gzip supprimera le fichier source
Toutes les opérations doivent être effectuées sur le nœud esclave ou le nœud de secours. Opération, s'il est effectué sur le nœud principal, le nœud principal est susceptible d'être en panne
la sauvegarde xtrabackup ne verrouillera pas la table InnoDB ; , mais verrouillera la table MyISAM. Par conséquent, avant d'opérer, n'oubliez pas de vérifier si la table de base de données actuelle utilise le moteur de stockage MyISAM. Si tel est le cas, traitez-la séparément ou modifiez le moteur de la table.
Dans la migration MySQL réelle, les techniques suivantes peuvent être utilisées :
Toute migration LOG FILE vers relay_master_log_file (le nom du journal binlog sur le maître en cours de synchronisation) prévaudra, et le LOG POS sera soumis à exec_master_log_pos (le point POS du journal binlog actuel en cours de synchronisation
) ; Utilisez rsync pour copier des données, qui peuvent être combinées avec expect , utiliser nohup est absolument une combinaison merveilleuse
Vous pouvez utiliser gzip pour la compression tout en utilisant innobackupex pour sauvegarder les données ;
Lors de l'utilisation d'innobackupex pour sauvegarder des données Pour les données, vous pouvez ajouter le paramètre –slave-info pour faciliter la base de données esclave
Lors de l'utilisation d'innobackupex pour ; sauvegardez les données, vous pouvez ajouter le paramètre –throttle pour limiter les E/S et réduire l'impact sur l'entreprise. Vous pouvez également ajouter le paramètre –parallel=n pour accélérer la sauvegarde, mais il convient de noter que lors de l'utilisation de la compression du flux tar, le paramètre –parallel n'est pas valide
Pour la sauvegarde des données ; et la récupération, vous pouvez créer une liste de tâches, dessiner un processus et préparer les commandes qui doivent être exécutées à l'avance
Un bon moyen de copier rapidement un dossier localement ; pour utiliser rsync, plus Les paramètres suivants : -avhW –no-compress –progress
Pour copier rapidement des données entre différentes partitions, vous pouvez utiliser dd. Ou utilisez une méthode plus fiable, sauvegardez sur le disque dur, puis placez-le sur le serveur. Il y a quelque chose d'encore mieux ailleurs, la livraison expressdirecte sur disque dur.
Cet article commence par pourquoi nous devons migrer, puis parle du plan de migration, puis explique la migration réelle dans différents scénarios et donne enfin les notes. Questions et compétences pratiques. Pour résumer, il y a les points suivants :
Premièrement, le but de la migration est de permettre à l'entreprise de fonctionner de manière fluide et continue.
Deuxièmement, le cœur de la migration est de savoir comment poursuivre la synchronisation maître-esclave ; Nous devons le faire sur différents serveurs et trouver des solutions entre différentes entreprises ;
Troisièmement, le changement d'entreprise doit prendre en compte les problèmes d'autorisation entre différents serveurs MySQL ; être pris en compte ; l'impact des appels entre salles de machines sur l'entreprise doit être pris en compte.
Les lecteurs peuvent se référer aux idées fournies dans cet article pendant le processus de migration. Mais comment garantir que chaque opération se déroule correctement nécessite une réflexion approfondie avant de continuer.
En passant, "La chose la plus importante pour prouver que vous êtes capable est de tout garder sous votre contrôle."
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!