在同一服务器上导入两个具有相同模式(数据库名称)的不同mysql转储文件

时间:2017-10-12 01:04:21

标签: mysql sql database ubuntu-16.04 ubuntu-server

我和我的团队正在努力纠正我们的前任所做的事情,这正在破坏我们服务器的结构。我们的前任将许多服务器放在同一个数据库上(数据库名称,表等),每个服务器包含另一个不可用的数据。

  

示例:

     

服务器1包含客户信息,但没有客户交易

     

服务器2没有客户信息,但有客户交易

依旧......

现在,我们正在努力纠正这些事情。将所有数据从2台服务器放到一台服务器上。

总之,我们有两个不同的mysql转储和一个服务器。

问题:使用相同的数据库名称,表格等导入这两个mysql转储是否可以,但是在已经拥有所述数据库的服务器上包含不同的数据?

我已经导入了mysql转储中的一个,所以我在等待你的确认。

我的服务器是Ubuntu Server 16.04.3(带有最小的gui)

使用Mysql Workbench的Mysql Server 5.7

非常感谢...

更新

由于mysql转储仅包含EXPLAINCREATE TABLE tablename部分以及NO INSERT INTO。我只是继续执行带有OPTION的mysql转储来忽略错误(当然,这取决于你的情况,这是不可取的),因为我唯一关心的是只从两个mysql转储中添加缺少的数据,这是唯一的我遇到的错误是"重复条目",这对我的情况来说是完美的。

感谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,转储文件只不过是一堆像这样的SQL语句:

--
-- Table structure for table `foo`
--

DROP TABLE IF EXISTS `foo`;

CREATE TABLE `foo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  ...other columns...
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `foo`
--

INSERT INTO `foo` VALUES (...lots of rows of data...);

请注意,它将为每个表执行的第一件事是DROP TABLE,然后重新创建表。

不要这样做!

如果您的表名称相同,那么它将清除您目前已加载的数据。

我建议您创建一个新数据库并将转储文件加载到该数据库中。然后,即使表具有相同的名称,您也可以访问一个MySQL实例中的所有数据。然后,您可以使用SQL运行跨数据库查询,以您想要的任何方式合并数据(例如,加入每个数据库中每个同名表的多表UPDATE语句)。

我想知道为什么你以前的数据库开发人员将数据分开了......它是否与Sarbanes-Oxley合规性有关?您可能希望在合并数据之前查看它。