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

问题描述:

我和我的团队正在努力纠正我们前任所做的事情,这正在破坏我们的服务器结构。我们的前任将大量服务器放在同一个数据库上(数据库名称,表等),每个服务器都包含其他数据不可用的数据。在同一服务器上导入两个具有相同模式(数据库名称)的不同mysql转储文件

例子:

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

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

等等...

现在,我们正在纠正这些问题。仅将来自2个服务器的所有数据放到一台服务器上。

手头上,我们有两个不同的mysql转储和一个服务器。

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

我已经导入了mysql dump的大内容,所以我正在等待您的确认。

我的服务器是Ubuntu的服务器16.04.3(以最小的GUI)

MySQL服务器5.7与MySQL工作台

非常感谢......

UPDATE

由于mysql dump只包含CREATE TABLE tablenameINSERT INTO部分和NO DROP TABLE IF IT EXIST tablename。我只是继续使用OPTION执行mysql转储来忽略错误(但是不可取,当然,这取决于您的情况),因为我唯一的担心是只添加来自两个mysql转储的缺失数据,我遇到的错误是“重复输入”,这对我的情况来说是完美的。

谢谢。

转储文件,在默认情况下,无非是这样一堆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,然后重新CREATE TABLE。

不要这样做!

如果您的表具有相同的名称,那么它将清除迄今已加载的数据。

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

我想知道为什么您的前数据库开发人员将数据分离出来......这可能与Sarbanes-Oxley合规性有关吗?在合并数据之前,您可能需要考虑这一点。

+0

感谢您的回复。我会研究你的建议,尽管我对此不太了解。我所知道的原因是,他们体验糟糕的表现,比如装载需要很长时间。但根据我的评估,糟糕的性能是服务器规格和配置较差的结果。但是我们仍然会测试这个只是为了合并所有的数据,由于数据丢失,无法找到一些事务。 – Markmeplease

+0

嗨比尔卡尔文,问题,如果mysql转储没有 'DROP TABLE IF EXUSTS foo;' 'CREATE TABLE foo' - - 我可以执行该mysql转储到服务器?非常感谢。 – Markmeplease

+1

@Markmeplease,是的,甚至有可用于mysqldump的选项可以省去DROP和CREATE语句。我鼓励你阅读文档,然后尝试一下! –