Maison > base de données > tutoriel mysql > Concentrez-vous sur l'enregistrement du processus de migration de données au niveau d'un million de Mysql !

Concentrez-vous sur l'enregistrement du processus de migration de données au niveau d'un million de Mysql !

藏色散人
Libérer: 2021-12-20 14:44:15
avant
2148 Les gens l'ont consulté

Supposons qu'un tel scénario existe, qu'un petit programme soit développé, et profitant de la popularité de l'événement Double Eleven, il accumule rapidement plus d'un million d'utilisateurs en un mois. Nous ajoutons un point d'enfouissement pour collecter des formulaires sur le petit. page du programme pour envoyer des notifications de message de modèle aux utilisateurs de WeChat.

À mesure que la quantité de données augmente, l'espace serveur utilisé auparavant commence à être un peu insuffisant. Récemment, j'ai écrit un nouveau framework spécifiquement pour le développement backend de petits programmes, je souhaite donc migrer les données d'origine vers la base de données du. nouveau système. J'ai acheté une machine 8G à 4 cœurs et j'ai commencé la migration des données. Faisons un simple enregistrement du processus de migration.

Concentrez-vous sur lenregistrement du processus de migration de données au niveau dun million de Mysql !

Sélection du plan

migration mysqldump

Dans le développement normal, la méthode de sauvegarde et de migration des données que nous utilisons souvent consiste à utiliser l'outil mysqldump pour exporter un fichier SQL, puis à importer SQL dans la nouvelle base de données. pour terminer la migration des données. [Recommandé : Tutoriel vidéo mysql]

Des expériences ont montré qu'il faut quelques minutes pour exporter une base de données de niveau million dans un fichier SQL via mysqldump. La taille du fichier SQL exporté est d'environ 1 Go, puis 1 Go SQL. La copie du fichier sur un autre serveur à l'aide de la commande scp peut prendre quelques minutes. J'ai utilisé la commande source pour importer des données dans la base de données du nouveau serveur. Je l'ai exécuté toute la nuit et les données n'ont pas été importées. Le processeur était plein.

Migration de script

Utiliser directement la base de données via la ligne de commande pour exporter et importer des données est un moyen plus pratique, mais lorsque la quantité de données est importante, cela prend souvent plus de temps et nécessite des performances de serveur plus élevées. . Si le temps requis pour la migration des données n'est pas très long, vous pouvez essayer d'écrire un script pour migrer les données. Bien que je ne l'aie pas réellement essayé, je pense qu'il existe probablement deux solutions de script.

La première méthode consiste à exécuter un script de migration sur le serveur cible de la migration, à se connecter à distance à la base de données du serveur de données source, à lire les données source en morceaux en définissant des conditions de requête et à les écrire dans la base de données cible après la lecture. Cette méthode de migration peut être relativement inefficace. L'exportation et l'importation de données sont équivalentes à un processus synchrone et vous devez attendre la fin de la lecture avant d'écrire. Si les conditions de requête sont conçues de manière raisonnable, plusieurs scripts de migration peuvent également être démarrés de manière multithread pour obtenir l'effet de migration parallèle.

La deuxième méthode peut être combinée avec redis pour construire une solution de migration « production + consommation ». Le serveur de données source peut servir de producteur de données, exécutant un script multithread sur le serveur de données source, lisant les données dans la base de données en parallèle et écrivant les données dans la file d'attente Redis. En tant que consommateur, le serveur cible exécute également un script multithread sur le serveur cible, se connecte à distance à Redis, lit les données dans la file d'attente Redis en parallèle et écrit les données lues dans la base de données cible. Par rapport à la première méthode, cette méthode est une solution asynchrone. L'importation et l'exportation de données peuvent être effectuées en même temps. En utilisant Redis comme station de transfert de données, l'efficacité sera grandement améliorée.

Ici, vous pouvez également utiliser le langage Go pour écrire des scripts de migration. Grâce à ses fonctionnalités de concurrence natives, vous pouvez atteindre l'objectif de migration des données en parallèle et améliorer l'efficacité de la migration.

Migration de fichiers

La première solution de migration est trop inefficace, et la deuxième solution de migration est plus coûteuse à coder Grâce à la comparaison et à l'analyse des informations trouvées en ligne, j'ai finalement choisi d'utiliser MySQL. La commande de

select data into outfile file.txt、load data infile file.txt into table
Copier après la connexion

finalise la migration de millions de données sous forme de fichiers d'import et d'export.

Processus de migration

Exporter le fichier de données dans la base de données source

select * from dc_mp_fans into outfile '/data/fans.txt';
Copier après la connexion

Copiez le fichier de données sur le serveur cible

zip fans.zip /data/fans.txtscp fans.zip root@ip:/data/
Copier après la connexion

Importez le fichier dans la base de données cible

unzip /data/fans.zipload data infile '/data/fans.txt' into table wxa_fans(id,appid,openid,unionid,@dummy,created_at,@dummy,nickname,gender,avatar_url,@dummy,@dummy,@dummy,@dummy,language,country,province,city,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy);
Copier après la connexion

Suivez ces quelques étapes et effectuez une centaine de tâches en quelques minutes Migration inter-serveurs de tables de données de niveau 10 000.

Notes

  • paramètres des éléments de sécurité mysql

L'exécution des commandes de chargement des données infile et into outfile dans mysql nécessite que l'option secure_file_priv soit activée dans mysql, qui peut être visualisée via show global variables comme '% secure%'; Si mysql a cette option activée, la valeur par défaut Null indique que les commandes d'importation et d'exportation ne sont pas autorisées à être exécutées.

Modifiez l'élément de configuration mysql via vim /etc/my.cnf et définissez la valeur de secure_file_priv sur vide :

[mysqld]  secure_file_priv=''
Copier après la connexion

Ensuite, vous pouvez importer et exporter des fichiers de données via des commandes.

  • Les champs de la table de données importés et exportés ne correspondent pas

Dans l'exemple ci-dessus, les données sont migrées de la table dc_mp_fans de la base de données source vers la table wxa_fans de la base de données cible. Les champs des deux tables de données sont : dc_mp_fans.

Concentrez-vous sur lenregistrement du processus de migration de données au niveau dun million de Mysql !

wxa_fans

Concentrez-vous sur lenregistrement du processus de migration de données au niveau dun million de Mysql !

Lors de l'importation de données, vous pouvez définir le nom du champ pour qu'il corresponde aux données du champ cible et supprimer les données inutiles du champ cible via @dummy.

Résumé

Basé sur cette expérience de migration de données, le résumé est le suivant :

  • De petites quantités de données peuvent être importées et exportées à l'aide de la commande mysqldump. Cette méthode est simple et pratique.
  • Lorsque la quantité de données est importante et que vous avez suffisamment de patience pour la migration, vous pouvez choisir d'écrire votre propre script et choisir une solution parallèle appropriée pour migrer les données. Cette méthode entraîne des coûts de codage plus élevés.
  • Lorsque la quantité de données est importante et que vous souhaitez terminer la migration des données dans un court laps de temps, vous pouvez les migrer via des fichiers d'importation et d'exportation MySQL, ce qui est plus efficace.           

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!

Étiquettes associées:
source:learnku.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal