如何解决SQL Server中镜像时出现的错误1418

16
我正在尝试在SQL Server中镜像数据库。我创建了一个数据库并备份了它,然后将其恢复到另一个服务器上。但是,在执行所有操作并单击开始镜像后,它显示以下错误。我在见证服务器选项中选择了“NO”enter image description here
我按照link中的镜像步骤进行操作。在第3步中,它说要在主服务器和镜像服务器上使用相同的凭据创建用户。是否有必要在两个服务器上创建相同的用户?或者是否有其他替代方案?

我认为上述问题是由于端口号引起的,因为instance1和instance2被赋予了相同的端口号。主服务器的默认端口号是5022,镜像是5023,见证是5024,所以请检查一下端口号。 - sandy
10个回答

22

我也面临过同样的问题。你需要检查以下事项:

  1. 打开services.msc,检查 SQL Server 运行在哪个账户下。确保 SQL Server 和 SQL Server Agent 服务使用相同的凭据运行。

  2. 在镜像数据库服务器上,您应该执行与步骤1相同的步骤。将凭据设置为与主服务器相同。如果该用户不存在,请在两个服务器上创建一个具有相同凭据的新用户。

  3. 现在进入主服务器,在 SQL Server 中添加新的登录账户: Security-->Login。将服务器角色设置为 Sysadmin 和 public。也要在镜像服务器上添加相同的用户。

  4. 现在在主数据库中进行镜像。这时不会出现任何错误。


你说“确保在主服务器和镜像服务器上,SQL Server和SQL Server Agent服务应该使用相同的凭据运行”。我没有在Windows Active Directory域中运行。我的服务必须在本地用户帐户下运行。你的回答是否假定这些用户是Active Directory用户? - Dave
谢谢,将SQL Server运行在域帐户下已经为我解决了问题。与本地帐户相比,是否存在任何缺点? - Jan Zahradník
通过使用相同的凭据,用户需要拥有相同的密码吗?我尝试过并没有成功复制。主服务器用户使用域帐户,镜像使用具有相同名称但可能具有不同密码的本地管理员。那通常是否有效? - RayofCommand

3
同样的问题,错误代码1418。按照这里建议的做了一切:链接
事后看来很明显。在完成“镜像配置安全向导”时,会得到一个解释结果的页面。查看SQL1和SQL2节点,下面这行是关键:
On the principal server instance, SQL1
Listener Port: 5022
Encryption: **Yes**


On the mirror server instance, SQL2
Listener Port: 5022
Encryption: **No**

解决方案。在所有SQL节点上完成向导后,执行以下操作:
drop endpoint Mirroring
go


CREATE ENDPOINT Mirroring
STATE = STARTED
AS TCP ( LISTENER_PORT = 5022 )
FOR DATABASE_MIRRORING 
(ENCRYPTION = DISABLED,ROLE=ALL)
GO

点击开始镜像,问题解决。

希望能对某些人有帮助 Scott


2
在尝试了上述所有选项后,我对镜像环境进行了变化。我们有一个 SQL Server 2008 作为 Principal-Mirror 配置向 2014 服务器做出贡献。2014 Sql server 也被用于 AlwaysOn 配置以实现其他 Db 的 HA。现在,sql 2008 和 sql 2014 上的端点名称不同。
在获得上述错误后,我发现 2008 年的加密方式是 RC4,而 2014 年的加密方式是 AES。因此,它无法与 SQL2014 端点进行握手。我使用以下命令更改了加密方式以匹配 SQL 2008,并成功解决了问题!
ALTER ENDPOINT [Hadr_endpoint]
    FOR DATA_MIRRORING ( ENCRYPTION  = REQUIRED ALGORITHM RC4 )

1

您可能没有将备份用于镜像的副本保留在恢复状态中,这是必须保留的以打开镜像。

通常,SQL Server镜像的步骤如下:

1)备份原始数据库并将其复制到用于镜像的服务器。

2)备份事务日志并将其复制到用于镜像的服务器。

3)选择MMC中的恢复数据库,找到数据库的备份,并使用选项设置为保留为非功能状态且不回滚事务的状态进行还原。

4)选择还原和文件,然后选择日志文件,并使用无回滚和非功能选项还原日志文件备份。它是sql server 2008选项页面下面的第二个单选按钮。

5)转到原始数据库副本服务器并打开镜像。您需要使用在两个服务器上具有sysadmin权限的帐户才能启动镜像对话。


0
如果以上方法都不起作用,这就是导致我的问题的原因。 在两台服务器上运行以下查询并仔细查看。
SELECT @@Version

我的主服务器有一些更新,但是在我的镜像服务器上没有安装。

此外,您可以在SQL Server日志中查看其他信息,了解镜像不起作用的原因。这就是我意识到两个服务器版本不同的原因。


0
在SQL Server 2016上,解决方案是将您的[域帐户]作为主服务器和镜像服务器上的sysadmin。然后创建一个新帐户如下:
主服务器
use [master]
GO
CREATE LOGIN [domain\mirrorservername$] FROM WINDOWS
GO
GRANT CONNECT ON ENDPOINT::[Mirroring] TO [domain\mirrorservername$]
GO

镜像服务器

use [master]
GO
CREATE LOGIN [domain\principalservername$] FROM WINDOWS
GO
GRANT CONNECT ON ENDPOINT::[Mirroring] TO [domain\principalservername$]
GO

您需要创建这些帐户并授予CONNECT权限,因为这些帐户是主体和镜像服务器之间握手期间使用的帐户。

有关错误的更多详细信息,请检查您的SQL错误日志。

希望这篇文章能帮助到某些人。


0

我之前遇到过这个问题,所有的验证都通过了。最后使用一个新的端点解决了这个问题。根本原因是5022可能会阻塞其他会话。


0

我的错误 1418 已通过在两个服务器上使用相同的驱动器号解决...

尽管微软建议可以使用不同的字母,但我决定使用相同的驱动器号...

来自微软的信息:

此外,我们建议如果可能,镜像数据库的文件路径(包括驱动器号)与主数据库的路径相同。如果文件路径必须不同,例如,如果主数据库位于 F: 驱动器上,但镜像系统缺少 F: 驱动器,则必须在 RESTORE 语句中包含 MOVE 选项。


0

对我来说,我遇到了这个问题,并最终通过删除和重新创建镜像端点(SSMS -> 服务器对象 -> 端点 -> 数据库镜像)解决了它。


0

我遇到了同样的问题。我试图在一个域设置上,在Windows 2008 - R2上设置镜像。如上面的专家建议,我检查了SQL Server的“登录”帐户,对于SQLSERVER和SQLSERVERAGENT,并在两台机器上使用相同的域帐户来运行SQL Server服务。我成功地设置了镜像。

感谢您的帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接