2010-02-26 5 views
1

J'ai plusieurs fichiers de sauvegarde MySQL de grande taille provenant de différents DB et ayant des schémas différents. Je veux charger les sauvegardes dans notre EDW mais je ne veux pas charger les tables vides.Comment supprimer des tables vides d'un fichier de sauvegarde MySQL

En ce moment, je supprime les tables vides en utilisant AWK sur les fichiers de sauvegarde, mais je me demande s'il existe une meilleure façon de procéder.

Si quelqu'un est intéressé, ceci est mon script AWK:

EDIT: J'ai remarqué aujourd'hui que ce script a des problèmes, s'il vous plaît faites attention si vous voulez vraiment essayer de l'utiliser. Votre sortie peut être erronée ... Je posterai mes modifications au fur et à mesure que je les ferai.

# File: remove_empty_tables.awk 
# Copyright (c) Northwestern University, 2010 
# http://edw.northwestern.edu 

/^--$/ { 
    i = 0; 
    line[++i] = $0; getline 

    if ($0 ~ /-- Definition/) { 
    inserts = 0; 
    while ($0 !~/ALTER TABLE .* ENABLE KEYS /) { 
     # If we already have an insert: 
     if (inserts > 0) 
     print 
     else { 
     # If we found an INSERT statement, the table is NOT empty: 
     if ($0 ~ /^INSERT /) { 
      ++inserts 
      # Dump the lines before the INSERT and then the INSERT: 
      for (j = 1; j <= i; ++j) print line[j] 
      i = 0 
      print $0 
     } 
     # Otherwise we may yet find an insert, so save the line: 
     else line[++i] = $0 
     } 
     getline # go to the next line 
    } 
    line[++i] = $0; getline 
    line[++i] = $0; getline 
    if (inserts > 0) { 
     for (j = 1; j <= i; ++j) print line[j] 
     print $0 
    } 
    next 
    } else { 
    print "--" 
    } 
} 

{ 
    print 
} 
+0

montre un exemple de votre fichier d'entrée. ce que vous voulez vous débarrasser ou, et montrer la sortie désirée – ghostdog74

+0

pourriez-vous simplement charger le fichier de vidage entier, puis supprimer les tables vides? Les fichiers mysqldump de post-traitement sont assez compliqués et fragiles: les nouvelles versions changent souvent le contenu entourant les définitions de table, et votre script pourrait les manquer. – Martin

Répondre

0

Je ne peux pas penser à une option mysqldump qui sauter les tables vides dans votre sauvegarde. Peut-être l'option -where, mais pas sûr que vous pouvez faire générique. IMHO un post-traitement dans un deuxième script n'est pas si mauvais.