5

巨大なmysqldump出力があり、特定のテーブルの挿入を除外したいと思います。

ファイルは次のようになります。

--
-- Dumping data for table `big_table`
--

INSERT INTO `big_table` ...
INSERT INTO `big_table` ...


--
-- Table structure for table `next_table`
--

「テーブルbig_tableのデータのダンプ」と次の「テーブルのテーブル構造」の間にある挿入を切り取るにはどうすればよいですか。ファイルが大きすぎてテキストエディタに収まりません。

4

3 に答える 3

16

もちろん、すべての挿入がテーブル名で始まるという事実を見落としていました。だから私は簡単に使うことができます

grep -v "INSERT INTO \` big_table \ `" dump.sql> dump_stripped.sql
于 2012-07-17T12:32:15.667 に答える
7

を使用した1つのソリューションsed-- Dumping data for table 'big_table'リテラルと。の間のすべての行を検索します-- Table structure for table。そして、で始まらない行にコメントし--ます。

の内容を想定infile

1
2
3
4
--
-- Dumping data for table `big_table`
--

INSERT INTO `big_table` ...
INSERT INTO `big_table` ...


--
-- Table structure for table `next_table`
--
1
2
3
4
5
6

コマンドを実行します:

sed -e '
    /-- Dumping data for table `big_table`/,/-- Table structure for table/ { 
        /^--/! s/^/--/ 
    }
' infile

次の出力で:

1
2
3
4
--
-- Dumping data for table `big_table`
--
--
--INSERT INTO `big_table` ...
--INSERT INTO `big_table` ...
--
--
--
-- Table structure for table `next_table`
--
1
2
3
4
5
6
于 2012-07-17T12:43:09.267 に答える
0

回避策はどうですか:

  1. 更新したくないテーブルをバックアップします(名前を変更してから、空のバージョンを再作成します)
  2. ダンプを実行します
  3. テーブルを復元し、ダンプによって供給されたテーブルをオーバーライドします

これがお役に立てば幸いです。

于 2012-07-17T12:29:20.250 に答える