Как удалить таблицу из mysqldump - PullRequest
7 голосов
/ 27 марта 2012

Как удалить вывод для одной большой таблицы внутри 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

Но как я могу изменить это для своих нужд?

Ответы [ 3 ]

14 голосов
/ 01 сентября 2012

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

Измените команду 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
11 голосов
/ 30 мая 2013

Я нашел этот 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*

Source: gist.github.com / 1608062

и немного улучшено: Как разделить вывод из mysqldump на файлы меньшего размера?

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

cat table* >glued_sqldump.sql

0 голосов
/ 27 марта 2012

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

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

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

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

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