MYSQL:导出/导入数据的最佳方法,以防止表的一致性

时间:2013-10-04 17:49:10

标签: php mysql database phpmyadmin

我在两台不同的服务器上有一个数据库。

数据库"store" on server A和相同的数据库"store" on server B

“store”数据库有以下两个表:

+-----------------------+           +---------------------+
:      jobs             :           :      votes          :
+.......................+           +---------------------+
:job_id     :primary key: --------> : job_id : primary key: (Linked to jobs->job_id)
+-----------+...........+           +---------------------+
:     title             :           :      up             :
+-----------------------+           +---------------------+
:   description         :           :      down           :
+-----------------------+           +---------------------+

表格职位和投票由foreign key相关(链接)。

数据库“存储”在服务器A

jobs有2300行,其job_id(primary key)从1到2300开始

votes具有相应的行

服务器B上的数据库“存储”

jobs有1200行,job_id(primary key)从1到1200

开始

votes具有相应的行

问题:

我希望以这种方式导入数据for server "A" database to server "B",以便将服务器A's数据库表的行(记录)插入到服务器B's数据库表中,并增加{{ 1}}表B's从1200开始。 并使用B的服务器作业job_id的新"jobs" job_id对应插入B'svotes

有哪些可能的安全方法可以帮助进行此类数据导入?

我可以简单job_id然后export SQL from phpMyAdim from server A。但我害怕失去记录的一致性。

2 个答案:

答案 0 :(得分:1)

您有一些潜在的方法。您使用的可能取决于这是一次性事物还是您计划多次执行的操作。

一个非常简单的方法是将数据库中的两个表中的所有自动增量值添加10000,然后只创建可以将这些值导入数据库B的SQL脚本。您将在自动增量中有一个间隙顺序,但这应该是一个问题。 (如果你想防止这种差距,你显然可以修改这种方法,将DB B中每个表的确切行数添加到DB A表中的自动增量值。)

另一种方法可能是编写脚本来为您执行此迁移。使用这种方法,您可以从DB A中读取数据并在DB B中的连接中插入以强制执行关系,同时让DB B自动设置自动增量值。

另一种方法可能是将DB A中的数据导入DB B中的单独表,然后从新表中选择数据并通过连接插入现有表。

答案 1 :(得分:1)

您可能需要考虑查看UUID。使用此方法,您的密钥将成为所有服务器上的唯一密钥。这是在前端做更多的工作以使这种方法有效,但是一旦你使用它,组合数据库不是问题。

Get the generated uuid after insert php