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

一种使用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 回答