代码之家  ›  专栏  ›  技术社区  ›  Markmeplease

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

  •  1
  • Markmeplease  · 技术社区  · 7 年前

    我和我的团队正在努力纠正我们的前任所做的事情,这正在破坏我们服务器的结构。我们的前身将许多具有相同数据库(数据库名称、表等)的服务器放在上面,每台服务器都包含其他服务器无法使用的数据。

    例子:

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

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

    等等

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

    另一方面,我们有两个不同的mysql转储和一个服务器。

    问题:可以导入这两个mysql转储文件吗?它们具有相同的数据库名称、表等,但在一个已经拥有上述数据库的服务器上包含不同的数据?

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

    我的服务器是Ubuntu server 16.04.3(带有最少的gui)

    带有Mysql Workbench的Mysql Server 5.7

    谢谢。。。

    更新

    因为mysql转储只包含 CREATE TABLE tablename INSERT INTO 零件和编号 DROP TABLE IF IT EXIST tablename . 我只是继续执行mysql转储,并选择忽略错误(但当然不可取,这取决于您的情况),因为我唯一关心的是只添加两个mysql转储中丢失的数据,我遇到的唯一错误是“重复条目”,这非常适合我的情况。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Bill Karwin    7 年前

    默认情况下,转储文件只是一堆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...);
    

    注意,它将为每个表做的第一件事是删除表,然后重新创建表。

    不要这样做!

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

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

    我想知道为什么你以前的数据库开发人员会分离数据。。。这可能与遵守萨班斯-奥克斯利法案有关吗?在合并数据之前,您可能希望对此进行研究。