在单用户模式下还原 Linux 上的 master 数据库

适用于:SQL Server - Linux

在某些情况下,可能需要在 Linux 上以单用户模式还原 SQL Server 实例上的 master 数据库。 场景包括迁移到新实例或从不一致中恢复。

注意

还原完成后,SQL Server 将自动关闭。 此行为是设计使然。

若要还原 master 数据库,必须使用命令行中的启动选项 -m 在单用户模式下启动 SQL Server。

若要在 Windows 上以单用户模式启动 SQL Server 实例,请参阅 SQL Server 单用户模式

先决条件

在单用户模式下启动 SQL Server 可使本地管理员组的任何成员作为 sysadmin 固定服务器角色的成员连接到 SQL Server。 有关详细信息,请参阅在系统管理员被锁定时连接到 SQL Server

在单用户模式下启动 SQL Server 实例时:

  • 只有一个用户可以连接到服务器。
  • 不执行 CHECKPOINT 进程。 默认情况下,它在启动时自动运行。

停止 SQL Server 服务

  1. 以下命令会在当前正在运行 SQL Server 实例时停止该实例:

    systemctl stop mssql-server
    

将当前用户更改为 mssql

  1. Linux 上的 SQL Server 在 mssql 用户下运行,因此需要先切换到此用户。 运行此命令时,系统会提示你输入 root 密码。

    su mssql
    

在单用户模式下启动 SQL Server

  1. -m 选项与 SQLCMD 结合使用时,可将连接限制为指定客户端应用程序(SQLCMD 必须大写,如下所示):

    /opt/mssql/bin/sqlservr -m"SQLCMD"
    

    在前面的示例中,-m"SQLCMD" 将连接限制为单个连接并且该连接必须将自身标识为 sqlcmd 客户端程序。 在单用户模式下启动 SQL Server 以还原 master 数据库时,使用此选项。

  2. SQL Server 在启动时,会生成多个日志条目。 可以通过在输出中查找以下行来确认它正在单用户模式下运行:

    [...]
    2022-05-24 04:26:27.24 Server      Command Line Startup Parameters:
             -m "SQLCMD"
    [...]
    2022-05-24 04:26:28.20 spid8s      Warning ******************
    2022-05-24 04:26:28.21 spid8s      SQL Server started in single-user mode. This an informational message only. No user action is required.
    

连接到 SQL Server 实例

  1. 使用 sqlcmd 连接到 SQL Server 实例:

    /opt/mssql-tools/bin/sqlcmd -S <ServerName> -U sa -P <StrongPassword>
    

    在前面的示例中,如果进行远程连接,则 <ServerName> 是运行 SQL Server 的主机的名称。 如果直接在运行 SQL Server 的主机上连接,则可以跳过此参数,或者使用 localhost<StringPassword> 是 SA 帐户的密码。

还原 master 数据库

  1. 在 sqlcmd 中运行以下命令。 请记住,sqlcmd 需要在脚本末尾具有 GO 才能执行。

    use [master];
    RESTORE DATABASE [master] FROM DISK = N'/var/opt/mssql/data/master.bak' WITH FILE=1,
    MOVE N'master' to N'/var/opt/mssql/data/master.mdf',
    MOVE N'mastlog' to N'/var/opt/mssql/data/mastlog.ldf', NOUNLOAD, REPLACE, STATS=5;
    GO
    

    在前面的示例中,指向 master 数据库备份文件的路径为 /var/opt/mssql/data/master.bak。 必须将此值替换为指向 master 数据库备份文件的正确路径。

  2. 如果还原成功,应会看到类似于以下示例的输出。

    Processed 456 pages for database 'master', file 'master' on file 1.
    Processed 5 pages for database 'master', file 'mastlog' on file 1.
    The master database has been successfully restored. Shutting down SQL Server.
    SQL Server is terminating this process.
    

重启 SQL Server 服务

  1. 若要重启 SQL Server,请运行以下命令。

    systemctl start mssql-server
    

备注

还原 master 数据库备份时,在备份后添加到实例中的任何现有用户数据库在还原 master 后都将不可见。 这些文件应仍存在于存储层上,因此需要手动重新附加这些用户数据库文件以使这些数据库联机。 有关详细信息,请参阅 Attach a Database