与同步(使两个数据库的模式和数据同步的一次性过程)不同,复制是一个连续(自动)在两个数据库之间重现数据的过程(尽管模式更新也是可能的)。复制可以异步完成,因此不需要永久连接两个数据库,或者可以在非高峰时间,数据库服务器流量很少时进行,例如在深夜时间。
复制的主要作用是创建所有用户数据库的合并存储库和/或在所有用户之间传播相同级别的信息。在任何一种情况下,结果数据库都是一个分布式数据库,用户可以在其中访问与其任务相关的数据,而不会干扰其他人的工作。数据库复制被称为规范化,为了消除用户之间的数据模糊或不一致。
在 Database Synchronization Strategies(数据库同步策略)白皮书中,我们使用 Navicat Premium 数据库管理系统探索了同步两个相同和不同类型的数据库的策略。在今天的文章中,我们将介绍如何使用 Navicat Premium 的新“自动运行”工具自动运行行数据库复制。
复制类型
数据库复制有至少三种不同的方式:
- 快照复制:一台服务器上的数据复制到同一台或不同服务器上的另一个数据库。
- 合并复制:来自两个或多个数据库的数据被合并到一个数据库中。
- 事务复制:用户收到数据库的完整初始副本,然后在数据更改时接收定期更新。
在分布式数据库管理系统(DDBMS)中,对一个位置的数据执行的更改、添加和删除会自动反映在存储在所有其他位置的数据中。这样做可确保每个用户访问与所有其他用户相同的数据集。
与同步一样,复制可以是同构的也可以是异构的:
- 同构:相同的源和目标数据库,即 Percona 到 Percona,MariaDB 到 MariaDB,MySQL 到 MySQL。
- 异构:不同的源和目标数据库,即 Oracle到Microsoft SQL Server,PostgresSQL 到 Amazon DynamoDB,MySQL 到 Amazon Aurora。
当一个或多个外部业务伙伴使用与我们自己不同的数据库类型的情况出现时,就需要使用异构复制。两种环境之间的自动定期数据复制通常是这种安排的组成部分。
Navicat Premium 的自动运行工具
Navicat Premium 的新自动运行工具在版本 12 中引入,具有易于使用且直观的界面,可用于创建自动的批处理作业。自动运行是在一个或多个定期间隔运行一个进程,并可在特定日期和时间开始和结束,就像 Windows 任务计划程序一样。除了复制之外,它还可用于各种工作,包括备份、查询和报表。
图 1:Windows 中的 Navicat Premium 12 自动运行工具
图 2:macOS 中的 Navicat Premium 12 自动运行工具
用户数据库
我们将使用 Sakila 示例 MySQL 数据库作为我们的用户数据库。它由 MySQL AB 文档团队的前成员 Mike Hillyer 开发,专门用于提供用于书籍、教程、文章等的标准模式。
该数据库以电影业为主题,涵盖从演员和电影制片厂到影碟出租店的所有内容。如果你有兴趣,可以在MySQL Dev 网站上查看完整的模式。
有关使用 Navicat设置Sakila数据库的说明,请参阅 databasejournal.com 上的Generating Reports on MySQL Data(生成 MySQL 数据报表)一文。
Navicat Premium 12 中的 Sakila MySQL 数据库结构
快照复制
如上所述,快照复制通过将数据从一个数据库复制到同一台或不同服务器上的另一个数据库,使两个数据库同步。这是三种类型中最简单的一种。
创建数据同步工作
首先必须创建数据同步配置文件,以便将其作为复制进程自动运行。在 Database Synchronization Strategies 白皮书中描述了在 Navicat Premium 12 中实行同构和异构同步的步骤。出于本教程的目的,我们将在 sakila 和 sakila2 数据库之间进行同构同步作为第一个示例。
提示:创建 sakila 数据库后,可以通过右击导航窗格中的连接并选择“新建数据库”来创建 sakila2 数据库。然后在弹出窗口中输入数据库名(“sakila2”)。
打开数据同步向导:
- 从菜单栏中选择“工具”->“数据同步”。
- 数据同步的“选项”选项卡仅包含几个比较选项的复选框。我们可以不去设置它们:/li>
- 数据同步向导的下一步是映射表。可以通过下拉列表选择目标表。在这例子中,我们不需要提供任何映射指令,因为两个数据库中的表是相同的:
比对数据后,窗口显示将在目标表中插入、更新或删除的记录数。如果你不想包含具有相同数据的表和具有不同结构的表(即换句话说,不会更新的表),则可以取消勾选“显示相同的表和其他”。还有一些复选框可取消选择表或你不希望应用于目标的操作。
在列表中选择一个表将在底部窗格显示源表和目标表的数据。源和目标之间不同的值会高亮显示。与在顶部窗格中一样,你可以取消勾选你不想应用于目标的记录。
“不同”选项
可以从下拉列表中选择要显示的差异类型。下面是可用的选项:
- 不同:显示源表和目标表中所有不同的记录。
- 插入:仅显示目标表中不存在的记录。
- 更新:仅显示源表和目标表中存在但具有不同值的记录。
- 删除:仅显示源表中不存在的记录。
- 相同:显示源表和目标表中存在并具有相同值的记录。
- 全部行:显示源表和目标表中的所有记录。
在我们的例子中,选择“更新”或“相同”将显示零行,因为没有要更新的行(仅插入)而且没有相同的行:
和以前一样,点击“部署”按钮会生成并显示“部署脚本”:
此屏幕与之前的屏幕一样,包含“保存配置文件”按钮,可让你保存设置以供将来使用。此特定屏幕还有一个用于保存“部署脚本”的按钮。
你仍可以“重新比对”这两个数据库,或继续“运行”部署脚本。这里有一个“遇到错误时继续”复选框。当勺选了此框,在遇到错误时部署不会停止。
在脚本运行时,你可以在“信息日志”中查看其进度。它显示已处理的记录数目和已完成的百分比:
关闭对话框后,我们可以确认 sakila2 数据库的表中有数据:
不要忘记保存配置文件,因为批处理作业将使用它。
创建批处理作业
我们现在将使用 Navicat 的自动运行工具设置在 sakila 和 sakila2 数据库之间的定期复制。
- 首先,点击主工具栏中的“自动运行”按钮。
- 然后点击“对象”工具栏中的“新建批处理作业”以打开新建批处理作业选项卡。
- 在“对象”窗格中浏览源连接、数据库和/或模式。这将使该数据库的已保存的工作显示在底部的“可用的工作”窗格中。
在“可用的工作”窗格中,选择“数据同步”工作类型,然后双击或拖动工作将其从“可用的工作”列表移动到上面的“已选择的工作”列表中。(你可以以相同的方式从“已选择的工作”列表中删除工作。) - 点击自动运行工具栏上的“保存”按钮,并在“保存”对话框中提供描述性名称。
这将启用“设置任务计划”和“删除任务计划”按钮。
“常规”选项卡
在“计划任务”对话框的“常规”选项卡中,你可以提供该任务的说明。此选项卡更提供多个运行选项。
- 在“安全选项”框中,你可以配置要在其下运行任务的用户或组帐号。有一个选项是无论用户是否登录都会运行任务。如果选择该选项,你需要在保存计划时,在“Windows 任务计划程序”中提供操作系统用户的密码。
你还可以选择将任务作为“隐藏”运行,并将其配置为在特定操作系统上运行。
触发任务
“触发器”选项卡列出了任务的计划。可以将任务配置为以各种计划运行,包括一次、每天、每周、每月,以及每种计划的任何排列。
点击“新建...”按钮以显示“新建触发器”对话框:
相同的任务可以根据多个计划运行。例如,我们可以安排我们的数据库同步任务在每个月的第一天以及每个第二个星期日运行:
设置电子邮件通知
发件人
指定发件人的电子邮箱。例如:“该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。”。
收件人, 副本
指定每一个收件人的电子邮箱,以逗号或分号 (;) 分隔。
主旨
以自定义格式指定电子邮件的主旨。
主体
填写电子邮件的内容。
主机 (SMTP 服务器)
为出去的信息输入简单邮件传输协定(SMTP)服务器。
端口
输入连接出去的电子邮件(SMTP)服务器的端口号。
使用验证
如果你的 SMTP 服务器需要验证以发送电子邮件,可勾选这个选项,并输入“用户名”和“密码”。
安全连接
指定连接使用“TLS”、“SSL”安全连接或“永不”。
发送测试邮件
Navicat 将会发送一个测试邮件给你显示是成功或失败。
完成自动工作的配置后,可以点击“自动运行”工具栏中的“开始”按钮对其进行测试。
合并复制
顾名思义,合并复制将来自两个或多个数据库的数据组合到一个数据库中。作为练习,我们将 sakila 和 sakla2 数据库的内容合并到名为“sakila_merged”的第三个数据库中,该数据库将存储合并的数据集。
所需的数据同步工作
合并复制工作将要求我们创建并保存两个数据同步配置文件:每个源数据库一个。这些步骤与上面的“创建数据同步工作”部分完全相同,因此我们在此不再重复了。
创建批处理作业
批处理作业可能由源数据库或目标触发,就像我们在上一节“快照复制”中所做的那样。但是,通常从目标数据库触发批处理作业是最容易的,因为它们都将处同一服务器上。我们也会这样做。
- 点击主工具栏中的“自动运行”按钮。
- 然后,点击“对象”工具栏中的“新建批处理作业”以打开新的批处理作业选项卡。
- 在“对象”窗格中浏览源连接、数据库和/或模式。这将使该数据库的已保存的工作显示在底部的“可用的工作”窗格中。
- 在“可用的工作”窗格中,选择“数据同步”工作类型,然后双击或拖动工作将其从“可用的工作”列表移动到上面的“已选择的工作”列表中。
- 点击自动运行工具栏上的“保存”按钮,并在“保存”对话框中提供描述性名称。这将启用“设置任务计划”和“删除任务计划”按钮。
- 在“计划任务”对话框的“常规”选项卡中,你可以提供该任务的说明。此选项卡更提供多个运行选项。
- “触发器”选项卡列出了任务的计划。任务可以配置为以各种计划运行,包括一次、每天、每周、每月,以及每种计划的任何排列。这次将运行两个工作而不是一个。
- 完成自动工作的配置后,可以点击“自动运行”工具栏中的“开始”按钮对其进行测试。
事务复制
在“合并复制”中,只有合并的数据库包含所有最新数据。而每个源数据库仅包含基线数据,以及自首次填充以来插入的内容。在事务复制中,用户会收到数据库的完整初始副本,然后在数据更改时接收定期更新,以便所有数据库都使用相同的数据集。保持多个数据库同步使事务复制成为最复杂的复制类型。
所需的数据同步工作
使用事务复制,所需的数据同步作业数量会大幅增加,因为必须跨所有用户数据库复制数据。例如,假设我们有三个名为 sakila、sakila2 和 sakila3 的数据库。我们可以使用总共六个数据同步工作在所有用户数据库中合并和传播完整数据集:有三个用于合并用户数据库,另外三个使用合并数据集更新它们。
这是包含所有六个工作的自动运行向导:
为了有足够的时间完成数据合并,最好将作业分成两部分,第一部分为合并数据,第二部分在指定的延时后用完整数据集更新用户数据库。
以下是将合并数据集传播到用户数据库的自动运行的例子:
在运行第一次工作两小时后运行这项工作应该有足够的时间来完成合并。因此,如果第一次工作计划在午夜运行,我们会将此工作设置为凌晨 2 点开始:
总结
在数据库同步策略白皮书的后续内容中,我们介绍了如何使用 Navicat Premium 12 的自动运行工具自动运行数据库复制。与其同步工具结合使用,DBA 能设置预定义的计划,自动运行各种类型的复制。
有关 Navicat Premium 12 的更多信息,请访问产品页面。