Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何扫描一个数据库中的新数据并将其发送到另一个数据库?_Mysql_Sql_Database - Fatal编程技术网

Mysql 如何扫描一个数据库中的新数据并将其发送到另一个数据库?

Mysql 如何扫描一个数据库中的新数据并将其发送到另一个数据库?,mysql,sql,database,Mysql,Sql,Database,我在两台服务器上有两个数据库。 第一个包含许多表,其中包含许多代码。 例如,Products表包含ProductCode列。 假设该列中有5条不同的记录,即ProductCode1->ProductCode5 第二个数据库包含第一个数据库中定义的每个表中的所有字段。 我使用第二个数据库为在第一个数据库中找到的每个代码提供定义。我已经通过excel文件和脚本手动将第一个数据库中所有表中的所有数据迁移到新数据库中 但是,我想创建一个SQL函数,它扫描第一个数据库,当它发现新行数据时,它会将该数据添加

我在两台服务器上有两个数据库。 第一个包含许多表,其中包含许多代码。 例如,Products表包含ProductCode列。 假设该列中有5条不同的记录,即ProductCode1->ProductCode5

第二个数据库包含第一个数据库中定义的每个表中的所有字段。 我使用第二个数据库为在第一个数据库中找到的每个代码提供定义。我已经通过excel文件和脚本手动将第一个数据库中所有表中的所有数据迁移到新数据库中

但是,我想创建一个SQL函数,它扫描第一个数据库,当它发现新行数据时,它会将该数据添加到第二个数据库中。 这将节省我单独查询所有表然后手动添加它们的麻烦,就像我最初做的那样

请注意,这两个数据库都存储在不同的服务器上。 这有可能实现吗?
或者有更好的选择吗?

看起来联邦存储是您需要的

从:

联邦存储引擎允许您从远程MySQL数据库访问数据,而无需使用复制或群集技术。查询本地联合表会自动从远程联合表中提取数据。本地表上未存储任何数据


下面是一篇演示如何配置它的文章:

虽然有恢复备份和复制方法,但如果两个数据库维护不同的数据,则没有一个简单方便的SQL函数可以将所有表中的新数据从一个数据库迁移到另一个数据库。但是,您可以构建运行重复的.sql脚本或存储过程,以避免查询新数据

考虑以下步骤,其中将为每个表运行1和2:

从远程MySQL数据库创建可在本地查询的数据库,但物理存储仍保留在远程数据库中。请参阅的概述。注意:对于每个需要的表,此步骤只需运行一次

创建联合表 id INT20非空自动增量, 名称VARCHAR32非空默认值, 其他INT20不为空默认值“0”, 主键id、索引名称、, 索引其他\u键其他 引擎=联邦 默认字符集=utf8mb4 连接mysql://fed_user@远程_主机:9306/联合/测试_表 联合表架构必须与远程表相同。因此,将CREATE TABLE的数据类型与远程数据库中的SHOW CREATE TABLE的输出对齐

运行SQL duplicate以避免查询,例如。另一种方法与并集和相交操作符的族不同:

插入产品Col1、Col2、Col3。。。 选择列1、列2、列3。。。 从我的联合产品表 除了 选择列1、列2、列3。。。 来自产品 将每个表的步骤2自动化为单个或.sql脚本,以便将来多次运行

分隔符$ 创建过程迁移新数据 开始 -联邦表中的所有INSERT INTO语句 结束$ 定界符; 每次从Excel、workbench、命令行或其他可用作SQL函数的地方运行该过程:

调用迁移新数据;
我不想复制数据。我宁愿抓取我想要的列并将其插入到另一个数据库中。在我的场景中,第二个数据库有一个名为CodeNo的列,其中包含数据库中所有表中所有可能的代码。我很欣赏这个答案,但我认为我们正在跨越界限。我已经创建了两个数据库。我不想为这种方法创建一个新表。我只是想学习如何编写脚本,以便它从现有表中收集新数据,并将其打印出来以手动添加到第二个数据库中,或者以某种方式自动添加到另一个数据库中。我不希望备份或复制。我只是想让tio从db_1中获取一个类似101的代码,并将其添加到db_2中。您可能没有仔细阅读我的答案。这不是备份或副本解决方案。联合表不是存储数据的实际表。本质上,它们是指向远程数据库表的连接代理。再加上插入查询,此解决方案可以按您的意愿执行:从现有表中收集新数据,并将其自动添加到其他数据库中。需要澄清的一点是,您不需要在目标数据库中每次只运行一次CREATETABLE。你不能从db_1中获取101这样的代码,然后将其添加到db_2中而不引用表。难道没有一种方法可以让我扫描数据库a中的所有表以获得一列,然后将其与数据库B进行比较吗?这些论坛上的主题是否讨论了MySQL中跨数据库服务器的迁移?在MySQL中,如果没有联邦表,就看不到如何跨服务器运行追加查询。同样,相同的模式意味着将相同的命名表从源数据库匹配到目标数据库,其中源数据库保存物理存储的表,目标数据库是联邦表。文件索引
在连接之前,它们必须匹配。我添加图表来帮助可视化。但是INSERT可以有不同的模式表,只要对齐相应的列即可。总之,如果您是SQL或MySQL的新手,这可能是一个高级解决方案。另一种替代方法是使用编程代码Java、Pyhon、PHP等在两个MySQL连接之间进行连接,并运行表到表的比较。