在同一服务器上导入两个具有相同模式(数据库名称)的不同mysql转储文件
我和我的团队正在努力纠正我们前任所做的事情,这正在破坏我们的服务器结构。我们的前任将大量服务器放在同一个数据库上(数据库名称,表等),每个服务器都包含其他数据不可用的数据。在同一服务器上导入两个具有相同模式(数据库名称)的不同mysql转储文件
例子:
服务器1包含客户信息,但没有客户交易
服务器2没有客户信息,但有客户交易
等等...
现在,我们正在纠正这些问题。仅将来自2个服务器的所有数据放到一台服务器上。
手头上,我们有两个不同的mysql转储和一个服务器。
问题:是否可以导入具有相同数据库名称,表格等的两个mysql转储,但在已经具有上述数据库的服务器上包含不同的数据?
我已经导入了mysql dump的大内容,所以我正在等待您的确认。
我的服务器是Ubuntu的服务器16.04.3(以最小的GUI)
MySQL服务器5.7与MySQL工作台
非常感谢......
UPDATE
由于mysql dump只包含CREATE TABLE tablename
和INSERT 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合规性有关吗?在合并数据之前,您可能需要考虑这一点。
感谢您的回复。我会研究你的建议,尽管我对此不太了解。我所知道的原因是,他们体验糟糕的表现,比如装载需要很长时间。但根据我的评估,糟糕的性能是服务器规格和配置较差的结果。但是我们仍然会测试这个只是为了合并所有的数据,由于数据丢失,无法找到一些事务。 – Markmeplease
嗨比尔卡尔文,问题,如果mysql转储没有 'DROP TABLE IF EXUSTS foo;' 'CREATE TABLE foo' - - 我可以执行该mysql转储到服务器?非常感谢。 – Markmeplease
@Markmeplease,是的,甚至有可用于mysqldump的选项可以省去DROP和CREATE语句。我鼓励你阅读文档,然后尝试一下! –