2012-03-27 3 views
6

Как удалить вывод для одной большой таблицы внутри mysqldump с большим количеством таблиц?Как удалить таблицу из mysqldump

У меня есть дамп базы данных размером 6 ГБ, но 90% ее - только одна таблица журналов «cache_entries», которую мне больше не нужно в моей резервной копии.

Как я могу легко удалить этот бит внутри дампа, который описывает большую таблицу журналов?

Я нашел это: http://gtowey.blogspot.de/2009/11/restore-single-table-from-mysqldump.html

Пример:

grep -n 'Table structure' dump.sql 

, а затем, например:

sed -n '40,61 p' dump.sql > t2.sql 

Но как я могу изменить, что для моих нужд?

+0

Зачем даже включать эту таблицу в исходную дамп? Кажется, что API для mysqldump должен позволить вам просто сбрасывать таблицы, которые вам нужны, http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html – ControlAltDel

+0

Я не сделал эту безумную резервную копию;) – rubo77

ответ

9

Я нашел этот сценарий bash, который разбивает дамп одной базы данных на отдельные поля для каждой таблицы, используя csplit (который разбивает файл на разделы, определенные по контекстным линиям):

#!/bin/bash 

#### 
# Split MySQL dump SQL file into one file per table 
# based on http://blog.tty.nl/2011/12/28/splitting-a-database-dump 
#### 

if [ $# -ne 1 ] ; then 
    echo "USAGE $0 DUMP_FILE" 
fi 

csplit -s -ftable $1 "/-- Table structure for table/" {*} 
mv table00 head 

for FILE in `ls -1 table*`; do 
     NAME=`head -n1 $FILE | cut -d$'\x60' -f2` 
     cat head $FILE > "$NAME.sql" 
done 

rm head table* 

Источник: gist.github.com/1608062

и немного повышена: How do I split the output from mysqldump into smaller files?

один раз, у вас есть отдельные файлы для каждой таблицы, вы можете удалить ненужные таблицы и склеить их в случае необходимости с

cat table* >glued_sqldump.sql

0

вам нужно найти инструкцию create table таблицы и найти следующий оператор create table. говорят, что они n1 и n2.

тогда вы можете просто удалить их с помощью sed, как указано выше. sed 'n1, n2d' dump.sql> new.sql

вы можете просто создать таблицу grep и отметить номера строк для вашей предварительной работы.

вот демонстрация.

[email protected]:~$ grep -n [34] a.txt 
3:3 
4:4 
[email protected]:~$ cat a.txt 
1 
2 
3 
4 
5 
6 
[email protected]:~$ grep [34] a.txt 
3 
4 
[email protected]:~$ sed '3,4d' a.txt > b.txt 
[email protected]:~$ cat b.txt 
1 
2 
5 
6 
[email protected]:~$ 
10

Вы можете использовать 'n, n d' для удаления определенных линий. Думаю, в вашем случае вы хотите иметь таблицу, о которой идет речь, но не хотите данных?

Изменить команду Grep включить "антидемпинговые данные для таблицы":

 
grep -n 'Table structure\|Dumping data for table' dump.sql 
19:-- Table structure for table `t1` 
37:-- Dumping data for table `t1` 
47:-- Table structure for table `t2` 
66:-- Dumping data for table `t2` 
76:-- Table structure for table `t3` 
96:-- Dumping data for table `t3` 

Теперь, если вы не хотите, чтобы данные для t2, вы можете использовать:

sed '66,75 d' dump.sql > cleandump.sql
Смежные вопросы