Comment importer un fichier de vidage MySQL volumineux (14 Go) dans une nouvelle base de données MySQL?
J'ai cherché partout et seule cette solution m'a aidé à:
mysql -u root -p
set global net_buffer_length=1000000; --Set network buffer length to a large byte number
set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number
SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour
source file.sql --Import your sql dump file
SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete!
La réponse est trouvée ici .
Avez-vous simplement essayé d'utiliser le client de ligne de commande mysql
directement?
mysql -u username -p -h hostname databasename < dump.sql
Si vous ne pouvez pas faire cela, Googling vous proposera de nombreux utilitaires qui vous aideront à importer un fichier de sauvegarde volumineux dans MySQL, tels que BigDump
Première ligne ouverte-> de commande
cd..
cd..
f: -- xampp installed drive
cd xampp/mysql/bin
mysql -u root -p
set global net_buffer_length=1000000; --Set network buffer length to a large byte number
set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number
SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour
use DATABASE_NAME;
source G:\file.sql; --Import your sql dump file
SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete!
Je publie ma conclusion dans quelques-unes des réponses que j'ai vues qui ne mentionnaient pas ce que j'avais rencontré et qui, apparemment, vaincrait même BigDump, vérifiez donc:
J'essayais de charger un cliché de 500 mégawatts via la ligne de commande Linux et n'arrêtais pas de recevoir les erreurs "Le serveur Mysql est parti". Les paramètres de my.conf n'ont pas aidé. Ce qui s’est avéré correctif est ... Je faisais un gros insert étendu comme:
insert into table (fields) values (a record, a record, a record, 500 meg of data);
Je devais formater le fichier en tant qu'insert séparé comme ceci:
insert into table (fields) values (a record);
insert into table (fields) values (a record);
insert into table (fields) values (a record);
Etc.
Et pour générer le dump, j'ai utilisé quelque chose comme ceci et cela a fonctionné à merveille:
SELECT
id,
status,
email
FROM contacts
INTO OUTFILE '/tmp/contacts.sql'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES STARTING BY "INSERT INTO contacts (id,status,email) values ("
TERMINATED BY ');\n'
La solution simple consiste à exécuter cette requête: mysql -h yourhostname -u username -p databasename < yoursqlfile.sql
Et si vous voulez importer avec la barre de progression, essayez ceci: pv yoursqlfile.sql | mysql -uxxx -pxxxx databasename
Utilisez source command pour importer une base de données volumineuse
mysql -u username -p
> source sqldbfile.sql
cela peut importer n'importe quelle grande base de données
Pour Windows, j'utilise Navicat Premium. Il vous permet de transférer des objets de base de données d’une base de données à une autre ou dans un fichier SQL. La base de données cible peut être sur le même serveur que la source ou sur un autre serveur.
Lors d'un projet récent, nous avons eu le défi de travailler avec et de manipuler une vaste collection de données. Notre client nous a fourni 50 fichiers CSV d'une taille allant de 30 à 350 Mo, contenant au total environ 20 millions de lignes de données et 15 colonnes de données. Notre objectif final était d’importer et de manipuler les données dans une base de données relationnelle MySQL afin d’alimenter un script frontal PHP que nous avons également développé. Maintenant, travailler avec un jeu de données aussi volumineux ou plus volumineux n’est pas la tâche la plus simple. Nous voulions prendre un moment pour partager quelques-uns des éléments que vous devriez prendre en compte et savoir lorsque vous travaillez avec de grands ensembles de données comme celui-ci.
1. Analysez votre ensemble de données avant l’importation Je ne saurais trop insister sur cette première étape! Assurez-vous de prendre le temps d'analyser les données avec lesquelles vous travaillez avant de les importer. Comprendre ce que toutes les données représentent, quelles colonnes en rapport avec quel type de manipulation et le type de manipulation dont vous avez besoin finira par vous faire gagner du temps à long terme.
2. LOAD DATA INFILE est votre ami Importer des fichiers de données volumineux tels que ceux avec lesquels nous avons travaillé (et des fichiers plus volumineux) peut s'avérer difficile si vous essayez une insertion CSV classique via un outil tel que PHPMyAdmin. Non seulement cela échouera-t-il dans de nombreux cas, car votre serveur ne sera pas en mesure de gérer un téléchargement de fichier aussi volumineux que certains de vos fichiers de données en raison des restrictions de taille de chargement et des délais d'attente du serveur, mais même en cas de succès, le processus pourrait prendre des heures en fonction de votre votre matériel. La fonction SQL LOAD DATA INFILE a été créée pour gérer ces grands ensembles de données et permettra de réduire considérablement le temps nécessaire au traitement du processus d'importation. Il est à noter que ceci peut être exécuté via PHPMyAdmin, mais vous pouvez toujours rencontrer des problèmes de téléchargement de fichier. Dans ce cas, vous pouvez télécharger les fichiers manuellement sur votre serveur, puis exécuter à partir de PHPMyAdmin (voir leur manuel d'utilisation pour plus d'informations) ou exécuter la commande via votre console SSH (en supposant que vous disposiez de votre propre serveur).
LOAD DATA INFILE '/mylargefile.csv' INTO TABLE temp_data FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
3. MYISAM vs InnoDB Base de données volumineuse ou petite, il est toujours bon de prendre un peu de temps pour déterminer quel moteur de base de données vous allez utiliser pour votre projet. MYISAM et InnoDB sont les deux principaux moteurs de lecture qui présentent des avantages et des inconvénients. En bref, les points à prendre en compte (en général) sont les suivants:
MYISAM
InnoDB
4. Planifiez soigneusement votre conception Analyse de MySQLVotre conception/structure de bases de données va jouer un rôle déterminant dans ses performances. Prenez votre temps pour planifier les différents champs et analysez les données pour déterminer les meilleurs types de champs, valeurs par défaut et longueurs de champs. Vous souhaitez gérer les quantités de données appropriées et essayez d'éviter les colonnes varchar et les types de données trop volumineux lorsque les données ne le justifient pas. Une étape supplémentaire après avoir terminé votre base de données est de voir ce que MySQL suggère comme types de champs pour tous vos champs. Vous pouvez le faire en exécutant la commande SQL suivante:
ANALYZE TABLE my_big_table
Le résultat sera une description de chaque information de colonne avec une recommandation sur le type de type de données à utiliser, ainsi qu'une longueur appropriée. Maintenant, vous n’avez pas nécessairement besoin de suivre les recommandations car elles sont basées uniquement sur des données existantes, mais cela peut vous aider à vous mettre sur la bonne voie et à vous faire réfléchir.
5. Pour indexer ou ne pas indexer Pour un ensemble de données aussi volumineux, il est extrêmement important de créer des index appropriés sur vos données en vous basant sur ce que vous devez faire avec les données frontales, MAIS si vous prévoyez de manipuler les données au préalable, évitez de placer trop d'index sur les données. Non seulement cela agrandira votre table SQL, mais cela ralentira également certaines opérations telles que l'ajout de colonnes, les soustractions et l'indexation supplémentaire. Avec notre ensemble de données, nous devions prendre les informations que nous venons d'importer et les diviser en plusieurs tables afin de créer une structure relationnelle, de prendre certaines colonnes et de scinder les informations en colonnes supplémentaires. Nous avons placé un index sur le strict minimum de colonnes qui, nous le savions, nous aideraient à manipuler. Au total, nous avons pris une grande table composée de 20 millions de lignes de données et réparti ses informations en 6 tables différentes contenant des données principales, ainsi que des données nouvellement créées à partir du contenu existant. Nous avons fait tout cela en écrivant de petits scripts PHP pour analyser et déplacer les données.
6. Trouver un équilibre La rapidité et l’efficacité sont un élément essentiel du travail avec des bases de données volumineuses. Obtenir toutes les données dans votre base de données est une bonne chose, mais si le script que vous écrivez pour accéder aux données est lent, à quoi ça sert? Lorsque vous travaillez avec de grands ensembles de données, il est extrêmement important que vous preniez le temps de comprendre toutes les requêtes exécutées par votre script et de créer des index pour les aider dans la mesure du possible. Une des manières d’analyser ce que font vos requêtes consiste à exécuter la commande SQL suivante:
EXPLAIN SELECT some_field FROM my_big_table WHERE another_field='MyCustomField';
En ajoutant EXPLAIN au début de votre requête, MySQL crache des informations décrivant les index qu’elle a essayé d’utiliser, qu’elle a utilisés et comment elle les a utilisés. J’ai étiqueté ce point "Recherche d’un équilibre", car même si les index peuvent aider votre script à fonctionner plus rapidement, ils peuvent tout aussi bien le ralentir. Vous devez vous assurer d'indexer ce qui est nécessaire et uniquement ce qui est nécessaire. Chaque index consomme de l'espace disque et ajoute à la surcharge de la table. Chaque fois que vous apportez une modification à votre table, vous devez reconstruire l'index pour cette ligne particulière. Plus vous aurez d'index sur ces lignes, plus cela prendra de temps. Tout se résume à la création d’index intelligents, de requêtes SQL efficaces et, plus important encore, à l’analyse comparative au fur et à mesure que vous comprenez ce que fait chacune de vos requêtes et combien de temps cela prend.
7. Index On, Index Off Alors que nous travaillions sur la base de données et le script frontal, le client et nous-mêmes avons commencé à remarquer de petites choses à modifier et nécessitant d’apporter des modifications à la base de données. Certaines de ces modifications impliquent l'ajout/la suppression de colonnes et la modification des types de colonnes. Comme nous avions déjà configuré un certain nombre d'index sur les données, pour apporter l'un de ces changements, le serveur a dû effectuer un travail sérieux pour maintenir les index en place et gérer les modifications éventuelles. Sur notre petit serveur VPS, certains des changements prenaient plus de 6 heures à compléter… ce qui ne nous aide certainement pas pour le développement rapide. La solution? Désactiver les index! Parfois, il est préférable de désactiver les index, de faire vos modifications, puis de les réactiver… .si vous avez beaucoup de changements à faire. Avec les index désactivés, les changements ont pris quelques secondes à quelques minutes. Lorsque nous étions satisfaits de nos modifications, nous avons simplement réactivé nos index. Bien sûr, cela a pris un certain temps pour tout réindexer, mais il a au moins été en mesure de tout réindexer en une fois, réduisant ainsi le temps total nécessaire pour effectuer ces changements un par un. Voici comment faire:
Désactiver les index: ALTER TABLE my_big_table DISABLE KEY
Activer les index: ALTER TABLE my_big_table ENABLE KEY
8. Donnez à MySQL une mise au point Ne négligez pas votre serveur pour exécuter votre base de données et votre script rapidement. Votre matériel nécessite autant d'attention et de réglage que votre base de données et votre script. En particulier, il est important de consulter votre fichier de configuration MySQL pour voir quelles modifications vous pouvez apporter pour améliorer davantage ses performances. Nous avons découvert un excellent petit outil, le tuner MySQL http://mysqltuner.com/ . C’est un petit script Perl rapide que vous pouvez télécharger directement sur votre serveur et exécuter via SSH pour voir les modifications que vous souhaitez apporter à votre configuration. Notez que vous devez utiliser activement votre script frontal et votre base de données pendant plusieurs jours avant d'exécuter le tuner afin que celui-ci dispose de données à analyser. L'exécuter sur un nouveau serveur ne fournira que des informations minimales et des options de réglage. Nous avons trouvé génial d'utiliser le script de syntoniseur tous les quelques jours pendant deux semaines pour voir les recommandations qu'il en tirerait et, à la fin, nous avons considérablement amélioré les performances des bases de données.
9. N'ayez pas peur de demander Travailler avec SQL peut être difficile au début et travailler avec des jeux de données extrêmement volumineux ne fait que compliquer encore les choses. N’ayez pas peur de faire appel à des professionnels qui savent ce qu’ils font quand il s’agit de grands ensembles de données. En fin de compte, vous obtiendrez un produit de qualité supérieure, un développement et des performances d’accélération plus rapides. Quand il s’agit de bases de données volumineuses, il faut parfois des yeux de professionnels expérimentés pour trouver toutes les mises en garde qui pourraient ralentir les performances de vos bases de données.