Как удалить таблицу из 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
Но как я могу изменить это для своих нужд?
Ответы
Ответ 1
Я нашел этот bash script, который разбивает дамп одной базы данных на отдельный файл для каждой таблицы, используя 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
и немного расширен:
Как разделить вывод mysqldump на более мелкие файлы?
один раз, у вас есть отдельные файлы для каждой таблицы, вы можете удалить ненужные таблицы и приклеить их вместе, если необходимо, с помощью
cat table* >glued_sqldump.sql
Ответ 2
Вы можете использовать 'n, n d' для удаления определенных строк.
Я думаю, в вашем случае вы хотите иметь таблицу, о которой идет речь, но не хотите данных?
Измените команду grep, чтобы включить "Dumping data for table":
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
Ответ 3
вам нужно найти инструкцию 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]:~$