我有一个表,它分布在两台运行MySql 4的服务器上。我需要将它们合并到一台服务器中,用于我们的测试环境。
这些表实际上每个都有数百万条记录,它们位于两个服务器上的原因是因为它们太大了。对表的任何更改和分页都会给我们带来太大的性能影响。
因为它们是在生产环境中,所以我不可能在它们现有的服务器上以任何方式修改它们。
问题是主键是一个唯一的自动递增字段,所以有交叉点。
我一直在尝试找出如何使用mysqldump命令来忽略某些字段,但是--disable-key只会改变表,而不是完全删除这些键。
在这一点上,看起来我需要修改数据库结构来利用主键的校验和或散列作为两个唯一字段的组合,这两个字段实际上应该是唯一的……我真的不想这么做。
帮助!
发布于 2009-06-19 15:54:55
如果您不关心auto_increment列的值是什么,那么只需加载第一个文件,重命名该表,然后重新创建表并加载第二个文件。最后,使用
INSERT newly_created_table_name (all, columns, except, the, auto_increment, column)
SELECT all, columns, except, the, auto_increment, column
FROM renamed_table_name发布于 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
原始输出:
INSERT INTO `core_config_data` VALUES
(2735,'default',0,'productupdates/configuration/sender_email_identity','general'),
(2736,'default',0,'productupdates/configuration/unsubscribe','1'),转换后的输出:
INSERT INTO `core_config_data` VALUES
(NULL,'default',0,'productupdates/configuration/sender_email_identity','general'),
(NULL,'default',0,'productupdates/configuration/unsubscribe','1'),注意:这仍然是一个技巧;例如,如果您的自动增量列不是第一列,那么它将失败,但是99%的时间可以解决我的问题。
发布于 2009-06-19 15:48:11
您可以创建一个没有主键列的表的视图,然后在该视图上运行mysqldump。
因此,如果您的表"users“包含以下列: id、名称、电子邮件
> CREATE VIEW myView AS
SELECT name, email FROM users编辑:啊,我明白了,我不确定有没有其他方法。
https://stackoverflow.com/questions/1018669
复制相似问题