2010-02-26 2 views
1

У меня есть несколько больших файлов резервного копирования MySQL из разных БД и с разными схемами. Я хочу загрузить резервные копии в наш EDW, но я не хочу загружать пустые таблицы.Как удалить пустые таблицы из файла резервной копии MySQL

Сейчас я вырезаю пустые таблицы с использованием AWK в файлах резервных копий, но мне интересно, есть ли лучший способ сделать это.

Если кому-то интересно, это мой сценарий AWK:

EDIT: Я заметил, что сегодня этот сценарий имеет некоторые проблемы, пожалуйста, будьте осторожны, если вы действительно хотите попробовать использовать его. Ваш результат может быть НЕПРАВИЛЬНЫМ ... Я буду публиковать свои изменения по мере их создания.

# 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

показать пример вашего входного файла. что вы хотите избавиться или, и показать желаемый результат – ghostdog74

+0

, можете ли вы просто загрузить весь файл дампа, а затем удалить все пустые таблицы? Послепроцессорные файлы mysqldump довольно сложны и хрупки: новые версии часто меняют содержимое, связанное с определениями таблиц, и ваш скрипт может их пропустить. – Martin

ответ

0

Я не могу думать о какой-либо опции в туздЫшпр, что бы пропустить пустые таблицы в вашей резервной копии. Может быть, вариант «где-то», но не уверен, что вы можете сделать общий характер. ИМХО пост-лечение во втором скрипте не так уж плохо.

Смежные вопросы