如何同步运行在不同服务器上的不同数据库(MYSQL)的两个表之间的数据

2024-04-11

我有 2 个不同的 mysql 数据库(旧的和新的)在不同的服务器上运行。旧数据库有大约 10 个表,我想同步其中的 3 个表数据库新表。因此,如果这 3 个表上发生任何添加/删除/更新,那么这些条目应该在数据库 NEW 上更新。 我已经使用 mysql 转储创建了新数据库。 但我想添加一个 cron 作业,它可以每 1 小时运行一次来​​同步 3 个表。

我想编写一个脚本,该脚本将使用时间戳跟踪上次同步的数据,然后将数据从旧同步到新。我确实在两台服务器之间建立了连接,但我无法找出实现此目的的方法。

任何建议或链接将不胜感激。


首先,为什么你们没有人回答这个家伙的问题?有时,由于安全限制/合规性/遗留系统,我们不得不这样做。

我将在这里用伪代码编写一些选项。不确定您的数据库的实时性如何,因此这并非在所有情况下都有效。

要求

为此,数据库必须位于同一服务器实例中。如果没有,您将需要设置联合存储引擎来访问远程数据。正如另一个人所说,MySQL 复制仍然有用,至少可以将数据传输到同一台服务器,从而使同步速度更快,而无需设置联合存储。 参考:https://dev.mysql.com/doc/refman/5.7/en/federated-storage-engine.html https://dev.mysql.com/doc/refman/5.7/en/federated-storage-engine.html

同步时序

您可以在event日程

MySQL 将允许您按照特定的计划创建事件来执行您的工作(假设您没有任何外部作业计划工具)。

希望您有某种修改日期,您可以每天查询一次或更严格的间隔查询所有字段modified_at>= DATE_SUB(NOW( ),INTERVAL ? 小时)

如果您能够添加一列,则可以创建一个名为synced_at这对服务器时钟差异有更大的抵抗力。然后你可以简单地查询在哪里synced_at为空或synced_at <= modified_at

或者,使用触发器

MySQL 支持 INSERT / UPDATE / DELETE 等的 BEFORE 和 AFTER 触发器...您可以使用它们来触发您的逻辑。请记住,每个事务都会造成一些性能损失,这很容易压垮非常活跃的生产服务器。

BEFORE 和 AFTER 之间确实没有很大的区别,除了如果您使用 BEFORE 样式触发器,如果​​两个表高度同步很重要,您可以抛出一个 sqlstate 来阻止插入到源表中。

同步逻辑

插入/更新/删除模式

这是伪代码,但是......

# new and updated records
INSERT ... ON DUPLICATE KEY UPDATE ...
SELECT FROM source_table
JOIN target_table.id
WHERE target_table.id IS NULL or modified_at > DATE_SUB(NOW(), INTERVAL ..)

# deleted records

插入/更新/删除后触发

与上面相同,只是您一次只操作一条记录,并且您正在镜像触发器语句。例如:源表上的 INSERT TRIGGER 应该只查询目标表上的 INSERT。

核DROP/CREATE/INSERT

简单,但不推荐用于除报告数据库之外的任何其他用途。删除整个表并根据其他记录重建它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何同步运行在不同服务器上的不同数据库(MYSQL)的两个表之间的数据 的相关文章

  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • 如何迁移我的 Heroku 数据库?

    我试过了 heroku rake db migrate and heroku pg push 第一个给我一个 PGerror rake 中止错误 有没有办法用heroku完全重建 重置我的数据库 我似乎在他们的文档中找不到它 编辑 在此之前
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 如何使用 MySQL 选择有特定值的 2 个连续行?

    我正在构建一个系统 该系统应该显示学生何时连续缺席两天 例如 此表包含缺勤情况 day id missed 2016 10 6 1 true 2016 10 6 2 true 2016 10 6 3 false 2016 10 7 1 tr
  • 拥有更多列或更多行会更高效吗?

    我目前正在重新设计一个可能包含大量数据的数据库 我可以选择在数据库中包含许多不同的列或使用大量行 如果我在下面做一些大纲 可能会更容易 item id user id title description content category t
  • 如何从 MySQL 数据查询创建 XML 文件?

    我想知道一种仅使用 MySQL 查询创建 XML 文件的方法 根本不使用任何脚本语言 有关于这个主题的书籍 教程吗 UPDATE 我想澄清一下 我想使用 sql 查询将 XML 数据转发到 php 脚本 Here s 关于从 MySQL S
  • MYSQL:如何在同一查询中联接两个表,两次引用同一个表

    我有两张桌子 我正在尝试将下面的示例两个表与表 1 引用表 2 两次结合起来 例如 如果我查看表 1 组 2 和成员 7 它应该查找表 2 中的 ID 并给出输出 Group Members Name Name 2 7 Blue Dog T
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • 选择获取与 MySQL Group 中 max 对应的整行

    当我使用Max使用后查找特定 MySQL 组中字段的最大值GROUP BY 是否可以获取包含最大值的整行 我在处理一些论坛代码时偶然发现了这个线程 我想获取每个线程的最新帖子并将其显示在特定板的线程列表中 Quassnoi上面的回答对我非常
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • mysql GROUP_CONCAT 重复项

    我从 farmTOanimal 表中进行连接 如下所示 有一个类似的farmTotool表 id FarmID animal 1 1 cat 2 1 dog 当我在视图中加入表时 我得到的结果如下所示 FarmID animal tool
  • 处理ON INSERT触发器时,innodb表如何锁定?

    我有两个 innodb 表 articles id title sum votes 1 art 1 5 2 art 2 8 3 art 3 35 votes id article id vote 1 1 1 2 1 2 3 1 2 4 2
  • XP及PHP MYSQL 练级系统

    我已经查看了所有提出的问题和答案 但我似乎找不到最适合我的答案 我想做的是开发一个系统 当用户达到一定的 XP 限制时 系统会进入下一个级别 它显示了下一个 XP 之前需要多少 XP So lvl1 0 gt lvl2 256 gt lvl
  • 就SQL注入而言,哪种sql查询更安全

    我有两个 SQL 查询正在尝试更新sup and opp每次调用查询时 值分别为 1 和 1 第一个查询 query update disc set sup sup opp opp where did did int sup getnoof
  • 复杂的sql树行

    表结构 id message reply id 1 help me 0 434 love to 1 852 didn t work 434 0110 try this 852 2200 this wont 0 5465 done 0110
  • Errno 121,写入或更新时出现重复密钥?

    SET OLD UNIQUE CHECKS UNIQUE CHECKS UNIQUE CHECKS 0 SET OLD FOREIGN KEY CHECKS FOREIGN KEY CHECKS FOREIGN KEY CHECKS 0 S
  • 使用来自另一个的 SELECT 更新表,但字段为 SUM(someField)

    基本上我有这样的事情 UPDATE Table SET Table col1 other table col1 FROM Table INNER JOIN other table ON Table id other table id 问题是
  • 我的用例可以合并到单个查询中而不影响性能吗?

    我主要着眼于改善表现查询的内容以及是否能够解决单一查询对于我的用例之一 解释如下 涉及到2张表 Table 1 EMPLOYEE column1 column2 email1 email2 column5 column6 Table 2 E
  • 在 BIRT 中输入参数后更新数据集查询

    在 BIRT 报告设计中传递参数后 如何更改或更新数据集的查询 详细说明 我有一个如下所示的查询 WHERE 该参数标记可以保存不同的值 在用户输入参数后 它看起来像这样 例如 WHERE column name 1 or WHERE co
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3

随机推荐

  • 在 Recyclerview 出现之前对其进行测量

    我目前在测量 recyclerView 出现之前遇到问题 我需要测量的高度才能启动 展开 动画 这是我之前在我正在处理的代码中为 gridView 完成的 我正在尝试使用 GridLayoutManager 将其迁移到 RecyclerVi
  • 每组具有最大值的行 - SQLite

    给定一个表columns name lat lon population type 每行有很多行name 我想选择按以下分组的行name where 人口是最高的 如果我仅限于姓名和人口 则以下内容有效 SELECT name Max po
  • 在 React 中逐个字母地“打印”字符串

    我有一个 React Native 组件 需要显示一个带有逐个字母打印的字符串字母的动画 因此 从逻辑上讲 我需要在循环内更新 React 状态挂钩 以 1 秒的间隔将字符串的每个字符附加到其中 到目前为止我所拥有的是 let placeh
  • 在android中以编程方式覆盖文本转语音设置中的“始终使用我的设置”选项

    某些平板电脑具有覆盖应用程序文本转语音设置的选项 名为 文本转语音设置中的 始终使用我的设置 如果选中此选项 则 TTS 引擎将选取 TTS 的用户设置 而不是特定于应用程序的设置 我的要求是 每当我的应用程序使用 TTS 引擎时 应始终使
  • Hibernate + Informix + Blob + 字节数组

    我在将字节数组保存到 Informix 数据库时遇到问题 我将向您展示我是如何尝试的 在 Fichero java 中 我有以下内容 Column name fichero columnDefinition blob private byt
  • 今天 iPad 的扩展高度比指定的要大得多

    我的今日扩展需要根据小部件显示的内容具有动态高度 我可以通过在最底部元素上添加约束来实现此目的 底部布局指南的顶部小于或等于最底部元素的底部 常数为 0 优先级为 999 乘数为 1 这与 iPhone 上的预期完全一样 小部件高度适合所有
  • 舍入到列表中最接近的任意数字

    我基本上是在寻找一种方法来做一些变化这个 Ruby 脚本 https stackoverflow com questions 3160502 ruby round number down to nearest number based on
  • Meteor 如何访问服务器端和客户端的 Facebook Graph Api

    脸书账户 https atmospherejs com meteor accounts facebook包仅提供登录和注销功能 流星fbgraph https github com stevezhu meteor fbgraph允许访问服务
  • Rails 3 和嵌套 jQuery 文件上传模型

    有没有人有关于使用嵌套属性让 jQuery 文件上传插件与 Rails 一起使用的建议 示例 我的模型 has many 附件并接受必要的嵌套属性 我想让它与 jQuery 文件上传一起使用 但还没有找到任何好的例子来帮助我开始 有没有人取
  • 带有 varargs 的 Julia @evalpoly 宏

    我正在尝试使用 Julia 的 evalpoly宏 当我手动提供系数时它可以工作 但我一直无法弄清楚如何通过数组提供这些系数 julia gt VERSION v 0 3 5 julia gt evalpoly 0 5 1 2 3 4 3
  • 几何着色器中的宽线表现得很奇怪

    我正在尝试使用几何着色器渲染任意宽线 在屏幕空间中 乍一看似乎一切都很好 但在某些视图位置上 线条渲染不正确 左侧图像呈现正确的渲染 正 X Y 和 Z 轴上的三条线 2 像素宽 当相机移动到原点附近 实际上靠近线条 时 线条会像正确的图像
  • Facebook 画布应用程序与 Facebook 移动网络应用程序

    我对 facebook 画布应用程序和 facebook 移动网络应用程序之间的区别有点困惑 这是我困惑的背景 我有一个画布应用程序 让我们将其命名空间称为 myfbapp 我基本上可以从https apps facebook com my
  • 返回匹配的逻辑向量:支持正则表达式吗?

    我想为字符向量上的正则表达式匹配返回一个逻辑向量 但 match 或 in 似乎不支持正则表达式 例如 gt x lt c Bill Brett Jane gt grep B x 1 1 2 gt x in B 1 FALSE FALSE
  • 奇怪的 jQuery Mobile listview 没有完全刷新

    我有一个 jQuery Mobile 列表视图不刷新的问题 但仅在一个极其特殊的实例中 当我在 Android 手机 特别是 Google Nexus 上测试我的应用程序时 会出现此问题 当我的列表视图从视图 1 正确加载到视图 2 后 就
  • 在 Angular 2 + Immutable.js 中迭代(使用 *ngFor)

    我正在使用 Angular 2 和 Immutable JS 但我似乎无法在我的模板中使用简单的 for 循环 真是令人沮丧 我尝试了以下旧语法 基于教程 div class filter row div class row title f
  • CA2W 给了我一个“'AtlThrowLastWin32':找不到标识符”错误

    当我遵循以下命令时 我遇到了一个奇怪的编译错误MSDN文档 http msdn microsoft com en us library 87zae4a3 VS 80 aspx在 Visual Studio 2005 中使用 CA2W 将 b
  • 如何在 django 中分离出我的模型?

    我正在尝试学习 python django 现在 我的所有模型都在 models py 中 是否可以分解我的模型 以便我可以在单独的模型文件夹中为每个模型创建一个文件 以便我可以执行以下操作 myproject myapp models u
  • Angular2 中的 OnPushObserve 和 OnPush 有什么区别?

    Angular2 中的 OnPushObserve 和 OnPush 有什么区别 我了解 onPush 策略和 Observables 的所有信息 但想知道这两者之间的区别 也许 ng2 dev 可以分享更多信息 文档似乎已经过时 http
  • 如何访问unittest.TestCase中的unittest.main(verbosity)设置

    根据文档 我可以在调用时设置 python 单元测试的详细级别unittest main e g unittest main verbosity 2 我怎样才能在一段时间内访问这些信息unittest TestCase 任何基于修补或子类化
  • 如何同步运行在不同服务器上的不同数据库(MYSQL)的两个表之间的数据

    我有 2 个不同的 mysql 数据库 旧的和新的 在不同的服务器上运行 旧数据库有大约 10 个表 我想同步其中的 3 个表数据库新表 因此 如果这 3 个表上发生任何添加 删除 更新 那么这些条目应该在数据库 NEW 上更新 我已经使用