2

Mon entreprise a reçu un fichier .sql de plus de 20 Go en réponse à une demande de données du gouvernement. Je n'ai pas beaucoup d'options pour obtenir les données dans un format différent, j'ai donc besoin d'options pour l'importer dans un délai raisonnable. Je l'utilise sur un serveur haut de gamme (Win 2008 64bit, MySQL 5.1) en utilisant l'outil d'exécution par lots de Navicat. Il fonctionne depuis 14 heures et ne montre aucun signe d'achèvement.Des options plus rapides pour l'exécution de fichiers .sql très volumineux (20 Go) dans MySQL

Est-ce que quelqu'un connaît des options plus rapides pour une telle transaction? Ou est-ce ce que je devrais attendre étant donné la taille du fichier?

Merci

Répondre

1

bulk importation dans MySQL pour cela.

9

Je suppose que vous voulez dire qu'il s'agit d'un fichier produit par mysqldump en tant que sauvegarde d'une base de données, il contient donc principalement des instructions CREATE TABLE et INSERT.

(Mais à proprement parler, un script SQL peut contenir quoi que ce soit, comme la définition et l'exécution des procédures stockées de longue durée, les requêtes qui aboutissent à des blocages, etc. Je suppose que cela est pas le cas.)

Voici quelques choses que vous pouvez faire pour accélérer la restauration, étant donné que vous avez le fichier de sauvegarde et ne peut pas changer le type de fichier est:

  1. Désactiver la vérification des clés étrangères: SET FOREIGN_KEY_CHECKS=0 (rappelez-vous réactivez ensuite ). Désactivez également les contrôles uniques: SET UNIQUE_CHECKS=0

  2. Assurez-vous que votre key_buffer_size est définie aussi grande que possible si vous utilisez des tables MyISAM. La valeur par défaut est 8 Mo et le maximum est 4 Go. J'essaierais 1Go.

    Ces premiers conseils viennent d'un poste par le baron Schwartz: http://lists.mysql.com/mysql/206866

  3. Assurez-vous que votre innodb_buffer_pool_size est réglée aussi grande que possible si vous utilisez des tables InnoDB. La valeur par défaut est 8 Mo et le maximum est 4 Go. J'essaierais 1Go.

  4. Définissez innodb_flush_log_at_trx_commit = 2 pendant la restauration si vous utilisez des tables InnoDB.

  5. @Mark B ajoute une bonne suggestion ci-dessous à disable keys lors d'une restauration. Voici comment vous le faites:

    ALTER TABLE <table-name> DISABLE KEYS; 
    ...run your restore... 
    ALTER TABLE <table-name> ENABLE KEYS; 
    

    Mais cette commande n'affecte qu'une seule table à la fois. Vous devrez émettre une commande séparée pour chaque table. Cela dit, il arrive souvent qu'une table soit beaucoup plus grande que les autres tables, donc vous devrez peut-être désactiver les clés uniquement pour cette grande table. En outre, si le script SQL contenant votre restauration supprime et recrée des tables, cela évite la désactivation des clés. Vous devrez trouver un moyen d'insérer les commandes pour désactiver les clés après la création de la table et avant l'insertion des lignes. Vous devrez peut-être faire preuve de créativité avec sed pour pré-traiter le script SQL avant de le transmettre au client mysql. Utilisez la version du serveur Percona de mysqldump, avec l'option --innodb-optimize-keys.

+0

Peut également vouloir désactiver les clés sur les tables pour la durée de l'importation. C'est généralement le tueur sur les grandes importations - la mise à jour de masse des clés. –

0

Demande uniquement les définitions de table et les données dans un fichier .csv. Ensuite, faites une importation en bloc.

0

Il y a une grande quantité d'outils autour, mais je recommanderais Navicat GUI de le faire. Dans mon expérience, il pourrait exécuter 48 Go * .sql fichiers en 6 heures sur un hôte avec 8 Go de RAM.

Explication (sorte de) ici: enter image description here cliquez sur secondaire choisi DB, sélectionnez « Exécuter le fichier SQL », choisissez le fichier, choisissez « continuer en cas d'erreur » si vous voulez et enfin l'exécuter. Je sais qu'il montre une base de données MySQL mais fonctionne sur le plus utilisé/populaire SGBD. Je ne conseille pas sérieusement d '"ouvrir" un fichier de telles proportions dans leur générateur de requêtes sql, cela bloquerait la machine car la RAM serait à pleine capacité encore et encore. Cela fonctionne aussi sur Macintosh OS en tant qu'hôte de l'application Navicat et une fois que vous êtes connecté à un serveur donné, vous pouvez l'exécuter où vous voulez, fonctionnant plutôt bien sur RHEL, Ubuntu Server, Debian et Windows Server jusqu'à maintenant.