У меня есть несколько больших файлов резервного копирования 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
}
показать пример вашего входного файла. что вы хотите избавиться или, и показать желаемый результат – ghostdog74
, можете ли вы просто загрузить весь файл дампа, а затем удалить все пустые таблицы? Послепроцессорные файлы mysqldump довольно сложны и хрупки: новые версии часто меняют содержимое, связанное с определениями таблиц, и ваш скрипт может их пропустить. – Martin