教程:为复制准备 SQL Server(发布服务器、分发服务器、订阅服务器)
适用范围:SQL Server
在配置复制拓扑之前,制定安全计划是非常重要的。 本教程演示如何更好地保护复制拓扑的安全。 它还会演示如何配置分发,这是数据复制的第一步。 开始其他教程之前,必须先完成本教程。
注意
若要在服务器之间安全地复制数据,你应该实施复制安全最佳做法中提出的所有建议。
在本教程中,你将了解如何准备服务器以便用最少的特权安全地运行复制。
本教程介绍如何执行下列操作:
- 为复制创建 Windows 帐户。
- 准备快照文件夹。
- 配置分发。
先决条件
本教程适用于熟悉基本数据库操作,但对复制认识有限的用户。
若要完成本教程,需要 SQL Server、SQL Server Management Studio (SSMS) 以及 AdventureWorks 数据库:
在发布服务器(源)上,安装:
任何版本的 SQL Server,SQL Server Express 或 SQL Server Compact 除外。 这些版本不能是复制发布者。
AdventureWorks2022
示例数据库。 为了增强安全性,默认情况下不会安装示例数据库。
在订阅服务器(目的地)上,安装任意版本的 SQL Server,SQL Server Compact 除外。 SQL Server Compact 不能是事务复制中的订阅服务器。
下载 AdventureWorks 示例数据库。 有关在 SSMS 中还原数据库的说明,请参阅 使用 SSMS 还原数据库备份。
注意
本教程的预计学时:30 分钟
为复制创建 Windows 帐户
在本部分中,将创建 Windows 帐户以运行复制代理。 你将在本地服务器上为以下代理创建一个单独的 Windows 帐户:
Agent | 位置 | 帐户名 |
---|---|---|
快照代理 | 发布者 | <machine_name>\repl_snapshot |
日志读取器代理 | 发布者 | <machine_name>\repl_logreader |
分发代理 | 发布服务器和订阅服务器 | <machine_name>\repl_distribution |
合并代理 | 发布服务器和订阅服务器 | <machine_name>\repl_merge |
注意
在复制教程中,发布服务器和分发服务器共享同一 SQL Server 实例 (NODE1\SQL2016)。 订阅服务器实例 (NODE2\SQL2016) 是远程实例。 发布服务器和订阅服务器可能共享 SQL Server 的同一实例,但这不是必需的。 如果发布服务器和订阅服务器共享同一实例,则不需要在订阅服务器上创建帐户的步骤。
在发布服务器上为复制代理创建本地 Windows 帐户
在发布服务器上,从“控制面板”的“管理工具”中打开“计算机管理”。
在“系统工具”中,展开“本地用户和组”。
右键单击“用户”,然后选择“新建用户”。
在“用户名”框中,输入 repl_snapshot,提供密码和其他相关信息,然后选择“创建”来创建 repl_snapshot 帐户:
重复上述步骤创建 repl_logreader、repl_distribution 和 repl_merge 帐户:
选择“关闭”。
在订阅服务器上为复制代理创建本地 Windows 帐户
在订阅服务器上,从“控制面板”的“管理工具”中打开“计算机管理”。
在“系统工具”中,展开“本地用户和组”。
右键单击“用户”,然后选择“新建用户”。
在“用户名”框中,输入 repl_distribution,提供密码和其他相关信息,然后选择“创建”来创建 repl_distribution 帐户。
重复上述步骤创建 repl_merge 帐户。
选择“关闭”。
有关详细信息,请参阅 复制代理概述。
准备快照文件夹
在本部分中,你可配置用于创建和存储发布快照的快照文件夹。
为快照文件夹创建共享并分配权限
在文件资源管理器,浏览到 SQL Server 数据文件夹。 默认位置为 C:\Program Files\Microsoft SQL Server\MSSQL.X\MSSQL\Data。
创建名为 repldata的新文件夹。
右键单击该文件夹并选择“属性”。
在“repldata 属性”对话框的“共享”选项卡上,选择“共享”。
在“高级共享”对话框中,选择“共享此文件夹”,然后选择“权限”。
在“repldata 的权限”对话框中,选择“添加”。 在“选择用户、计算机、服务帐户或组”框中,键入以前创建的快照代理帐户的名称,例如 <Publisher_Machine_Name>\repl_snapshot。 选择“检查名称”,然后选择“确定”。
重复步骤 6,添加以前创建的两个帐户:<Publisher_Machine_Name>\repl_merge 和 <Publisher_Machine_Name>\repl_distribution。
添加三个帐户后,会分配以下权限:
- repl_distribution:读取
- repl_merge:读取
- repl_snapshot:完全控制
共享权限配置正确后,选择“确定”关闭“repldata 的权限”对话框。 选择“确定”关闭“高级共享”对话框。
选择“repldata 属性”对话框中的“安全性”选项卡,然后选择“编辑”:
在“repldata 的权限”对话框中,选择“添加”。 在“选择用户、计算机、服务帐户或组”框中,键入以前创建的快照代理帐户的名称,例如 <Publisher_Machine_Name>\repl_snapshot。 选择“检查名称”,然后选择“确定”。
重复上一步,为分发代理和合并代理添加权限,其格式分别为 <Publisher_Machine_Name>\repl_distribution 和 <Publisher_Machine_Name>\repl_merge。
验证是否允许以下权限:
- repl_distribution:读取
- repl_merge:读取
- repl_snapshot:完全控制
再次选择“共享”选项卡,并记下共享的“网络路径”。 稍后在配置快照文件夹时需要此路径。
选择“确定”关闭“repldata 属性”对话框。
有关详细信息,请参阅保护快照文件夹。
配置分发
在本部分中,将在发布服务器中配置分发,并设置所需的发布数据库和分发数据库权限。 如果已配置分发服务器,则必须在开始本部分之前禁用发布和分发。 如果必须保留现有的复制拓扑,尤其是在生产环境中,请不要禁用发布和分发。
使用远程分发服务器配置发布服务器不属于本教程讨论的范畴。
在发布服务器中配置分发
在 SQL Server Management Studio 中连接到发布服务器,然后展开服务器节点。
右键单击“复制”文件夹,然后选择“配置分发”:
如果使用 localhost 而不是实际服务器名称连接到 SQL Server,系统会提示你发出警告,指出 SQL Server 无法连接到 localhost 或 IP 地址。 在警告对话框中选择“确定”。 在“连接到服务器”对话框中,将“服务器名称”从 localhost 或 IP 地址更改为你的服务器的名称。 然后选择“连接” 。
SQL Server Management Studio (SSMS) 18.0(及更高版本)当前存在一个已知问题,在连接到具有 IP 地址的分发服务器时,不会显示警告消息,但仍无效。 在连接到分发服务器时,应使用实际的服务器名称。
注意
可以将服务器名称指定为
<Hostname>,<PortNumber>
默认实例或<Hostname>\<InstanceName>,<PortNumber>
命名实例。 使用自定义端口在 Linux 或 Windows 上部署 SQL Server 时指定连接的端口号,并禁用浏览器服务。 远程分发服务器的自定义端口号的使用适用于 SQL Server 2019 (15.x) 及更高版本。此时分发配置向导启动。
在“分发服务器”页上,选择 <'ServerName'>“将充当自己的分发服务器;SQL Server 将创建分发数据库和日志”。 然后选择下一步。
如果SQL Server 代理未运行,请在“SQL Server 代理启动”页上选择“是”,将SQL Server 代理服务配置为自动启动。 选择下一步。
在“快照文件夹”框中输入路径 \\<Publisher_Machine_Name>\repldata,然后选择“下一步”。 此路径应匹配以前配置共享属性后,在 repldata 属性文件夹的“网络路径”下看到的路径。
接受向导剩余页上的默认值。
选择“完成”以启用分发。
配置分发服务器时,可能会看到以下错误。 这表明用于启动SQL Server 代理帐户的帐户不是系统上的管理员。 需要手动启动SQL Server 代理,向现有帐户授予这些权限,或修改SQL Server 代理使用的帐户。
如果正在使用管理权限运行 SQL Server Management Studio 实例,可从 SSMS 中手动启动 SQL 代理:
注意
如果 SQL 代理不启动,右键单击 SSMS 中的 SQL Server 代理,然后选择“刷新”。 如果仍处于停止状态,请从 SQL Server 配置管理器中手动启动它。
设置数据库权限
在 SQL Server Management Studio 中,展开“安全性”,右键单击“登录名”,然后选择“新建登录名”:
在“常规”页上,选择“搜索”。 在“输入要选择的对象名称”框中输入 <Publisher_Machine_Name>\repl_snapshot,然后依次选择“检查名称”和“确定”。
在“用户映射”页上,在“映射到此登录名的用户”列表中选择“distribution”和“
AdventureWorks2022
”数据库。在“数据库角色成员身份”列表中,为这两个数据库的登录名选择“db_owner”角色。
选择“确定”创建登录名。
重复步骤 1-4,为其他本地帐户(repl_distribution、repl_logreader 和 repl_merge)创建登录名。 这些登录名也必须映射到属于“distribution”数据库和“AdventureWorks”数据库中“db_owner”固定数据库角色成员的用户。