2012-03-27 19 views
6

Mysqldump içindeki bir tablodaki çıktısı büyük bir tablo için nasıl silebilirim?Bir tabloyu mysqldump dan nasıl silebilirim

6 GB büyüklüğünde bir veritabanı dökümüm var, ancak bunun% 90'ı yalnızca bir yedekleme tablosu "cache_entries", yedeklemenin içinde artık ihtiyacım yok.

Bu biti, büyük günlük tablosunu açıklayan dökümün içine nasıl kolayca çıkarabilirim?

bunu buldum: http://gtowey.blogspot.de/2009/11/restore-single-table-from-mysqldump.html

Örnek: örneğin

grep -n 'Table structure' dump.sql 

ve sonra:

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

Ama benim ihtiyaçları için nasıl değiştirebilirim?

+0

Neden bu tabloyu ilk dökümünde eklediniz? Bu mysqldump için API sadece http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html – ControlAltDel

+0

Ben bu çılgın yedekleme yapmadım tablolar dökmek için izin vermelidir gibi görünüyor;) – rubo77

cevap

9

buldum Bu betik betiği, bir tablonun bir dökümü csplit (bağlam çizgileri tarafından belirlenen bölümler halinde böler) (

#!/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* 

Kaynak: gist.github.com/1608062

ve biraz geliştirilmiş: Bir kez How do I split the output from mysqldump into smaller files?

, ayrı dosyalar her tablo için, istenmeyen tablolar silip

cat table* >glued_sqldump.sql

ile gerekirse bunları birbirine birleştirebilir var
0

Tablonuzun create table deyimini bulmalı ve bir sonraki create table deyimini bulmalısınız. n1 ve n2 olduklarını söyle.

daha sonra yukarıdaki gibi sed ile silebilirsiniz. sed 'n1, n2d' dump.sql> new.sql

Sadece tablo oluşturmak ve ön işleminiz için satır numaralarını not etmek için grep yapabilirsiniz.

burada bir demo dur.

[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

Bazı satırları kaldırmak için 'n, n d' kullanabilirsiniz. Sanırım sizin durumunuzda, söz konusu tabloya sahip olmak istiyorsunuz, ancak verileri istemiyor musunuz? grep komutu "tablosu için Damping verileri" içerecek şekilde

Değişiklik: t2 için veri istemiyorsanız Şimdi

 
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` 

, şunu kullanabilirsiniz:

sed '66,75 d' dump.sql > cleandump.sql
İlgili konular