首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不转储主键的mysqldump表

问不转储主键的mysqldump表
EN

Stack Overflow用户
提问于 2009-06-19 15:42:25
回答 10查看 41.5K关注 0票数 45

我有一个表,它分布在两台运行MySql 4的服务器上。我需要将它们合并到一台服务器中,用于我们的测试环境。

这些表实际上每个都有数百万条记录,它们位于两个服务器上的原因是因为它们太大了。对表的任何更改和分页都会给我们带来太大的性能影响。

因为它们是在生产环境中,所以我不可能在它们现有的服务器上以任何方式修改它们。

问题是主键是一个唯一的自动递增字段,所以有交叉点。

我一直在尝试找出如何使用mysqldump命令来忽略某些字段,但是--disable-key只会改变表,而不是完全删除这些键。

在这一点上,看起来我需要修改数据库结构来利用主键的校验和或散列作为两个唯一字段的组合,这两个字段实际上应该是唯一的……我真的不想这么做。

帮助!

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-06-19 15:54:55

如果您不关心auto_increment列的值是什么,那么只需加载第一个文件,重命名该表,然后重新创建表并加载第二个文件。最后,使用

代码语言:javascript
复制
INSERT newly_created_table_name (all, columns, except, the, auto_increment, column)
       SELECT all, columns, except, the, auto_increment, column
         FROM renamed_table_name
票数 28
EN

Stack Overflow用户

发布于 2015-02-25 03:26:14

为了解决这个问题,我查找了这个问题,找到了@ auto_increment的答案,并意识到我们所需要做的就是用NULL替换每一行中的主键,这样mysql就会使用默认的NULL值。

(your complete mysqldump command) | sed -e "s/([0-9]*,/(NULL,/gi" > my_dump_with_no_primary_keys.sql

原始输出:

代码语言:javascript
复制
INSERT INTO `core_config_data` VALUES
    (2735,'default',0,'productupdates/configuration/sender_email_identity','general'),
    (2736,'default',0,'productupdates/configuration/unsubscribe','1'),

转换后的输出:

代码语言:javascript
复制
INSERT INTO `core_config_data` VALUES
    (NULL,'default',0,'productupdates/configuration/sender_email_identity','general'),
    (NULL,'default',0,'productupdates/configuration/unsubscribe','1'),

注意:这仍然是一个技巧;例如,如果您的自动增量列不是第一列,那么它将失败,但是99%的时间可以解决我的问题。

票数 30
EN

Stack Overflow用户

发布于 2009-06-19 15:48:11

您可以创建一个没有主键列的表的视图,然后在该视图上运行mysqldump。

因此,如果您的表"users“包含以下列: id、名称、电子邮件

代码语言:javascript
复制
> CREATE VIEW myView AS
  SELECT name, email FROM users

编辑:啊,我明白了,我不确定有没有其他方法。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1018669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档