将 SQL Server 数据库迁移至云端
![Olawale Olaleye Olawale Olaleye](https://d1.awsstatic.com/xuefezha-jennie/%e7%ba%a7%e5%88%ab_level%201.01c35fea97656a6beac50b0c8ae81e8afc1eedef.png)
![](https://d1.awsstatic.com/xuefezha-jennie/Group%20281.67a8494bd80a4bd979e37efcb490ada486dd72ae.png)
![](https://d1.awsstatic.com/guoheng/cost.84b1b7bbeb5d58956ebf11a05ed8152992f762ba.png)
可通过亚马逊云科技免费套餐免费试用,或 1.01 美元
![](https://d1.awsstatic.com/xuefezha-jennie/Group%20286.f8adeba47a39b3d6d21f8cbb0b6a751582e55927.png)
- 亚马逊云科技账户:如果您还没有账户,请按照设置亚马逊云科技环境入门指南操作以便快速了解。有关创建账户的快速概述,请参阅创建您的亚马逊云科技账户。
- 亚马逊云科技凭证:按照访问您的安全凭证中的说明获取您的亚马逊云科技凭证
- git 客户端:按照指南为您的操作系统安装 Git。
![](https://d1.awsstatic.com/guoheng/point-to-point-messaging-with-sqs/code.4d6cc6173fc04e1c6c381f942f75c083b207f0e1.png)
![](https://d1.awsstatic.com/xuefezha-jennie/Group%20287.a27381901d308706720071b52d42054d154eab4c.png)
![](https://d1.awsstatic.com/guoheng/product.2d7b328b4c088795e2ac7b9c03e03d54eb5ea73f.png)
从备份还原数据库对 IT 管理员而言是寻常的操作。将本地数据库迁移至云端的过程与此类似。但是,我们这次将不使用亚马逊云科技管理控制台,而用脚本自动执行该过程。在本教程中,我们将分步讲解如何将 SQL Server 数据库迁移至云,使用命令行(而不是 Console 应用程序)实例化和配置数据库服务器。
学习内容
- 如何创建基于浏览器的环境来使用云资源
- 如何创建存储并将其附加到数据库服务器
- 如何使用 Lightsail 蓝图部署和配置 SQL Server
- 如何在 Windows Server VPS 上恢复 MS SQL 数据库
模块 1:搭建工作环境
在本教程中,您将使用命令行 (CLI)。使用命令行有很多优点。第一,命令行创建服务的选项更加丰富。第二,您可以将命令链接在一起,一个命令返回的输出值可供另一个命令使用。第三,命令可以组合成一个可以重用的脚本。
无论是在本地服务器还是在云端,部署和配置通常都在本地计算机上完成。但是,使用在线环境也是有其优势的。基于浏览器的终端或集成开发环境 (IDE) 能够提供针对特定任务自定义的一致环境。它们可以用自定义工具链配置,从而减少依赖关系冲突。此外,它们可以从任何浏览器访问,并保留上次使用时的状态和历史记录。亚马逊云科技提供基于浏览器的终端 Cloudshell 和浏览器内 IDE Cloud9。
您将使用 Amazon CLI 并编写脚本。Cloud9 非常方便实用:您可以在 IDE 中编写和存储命令和脚本,并在附带的终端中执行它们。要开始使用 Cloud9,请使用亚马逊云科技管理控制台的搜索栏查找 Cloud9 服务。
步骤 1:创建 Cloud9 环境
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/cloud9-1.2c27c19619f97833c5348abf7b6d6d94b980c43a.png)
点击 Create Environment(创建环境)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/cloud9-2.e7a3456d90e500921d7f3f97ce3b3e8ce13e1f37.png)
在 Create Environment(创建环境)页面的 Details(详细信息)面板中,为环境命名。您还可以添加 Description(说明),以指定其使用方式并将其与其他环境区分开来。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/cloud9-3.9a01094e64a7fba71d7dba87e87a4768a87aab8e.png)
接受 New EC2 Instance(新建 EC2 实例)和 Networking(联网)面板的默认值。点击 Create(创建)。创建环境后,点击 Open(启动)以启动环境。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/cloud9-5.559fa25efcb664580bacdbcc7ebd1a2fb82211e2.png)
Cloud9 环境已准备就绪。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/cloud9-6.ff0ae2b1035e6fc00b24a95661384faaf522c859.png)
步骤 2:使用工具配置环境
本教程使用 Amazon CLI 和 Lightsail 插件。Cloud9 的当前版本内置 CLI 的 1.x 版本,但 Lightsail 插件需要 Amazon CLI 的 2.x 版本。您必须升级到 CLI 2.x 版本并安装 Lightsail 插件。
在 Cloud9 终端中,下载并安装 CLI 版本 2.x。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
sudo curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/linux-amd64/lightsailctl" -o "/usr/local/bin/lightsailctl"
sudo chmod +x /usr/local/bin/lightsailctl
检查安装。
aws lightsail —version
aws-cli/2.11.20 Python/3.11.3 Linux/4.14.314-237.533.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off
Cloud9 环境已准备就绪。
提示:Cloud9 是一个功能齐全的 IDE,您可以将命令片段和脚本保存在 Github 或 Gitlab 等代码存储库中。Cloud9 拥有用于管理存储库的 Git 面板。使用代码存储库的一个优点在于它可以在任何地方使用,您可以使用它来管理代码片段和脚本,以便重用。
模块 2:从 Lightsail 蓝图创建 SQL Server 实例
Amazon Lightsail 包含用常用软件包实例化 VPS 的模板。您将实例化装有 Lightsail 的 SQL Server 的 Windows Server。
在 Cloud9 终端中,使用 Amazon Lightsail CLI 通过蓝图创建具有 SQL Server 的 VPS。您可以使用 aws lightsail get-blueprints 命令查找蓝图。get-blueprints 命令列出所有可用的蓝图;您可以通过管道,将命令的输出传递给 UNIX grep 实用程序,查找特定蓝图。
aws lightsail get-blueprints | grep sql
"blueprintId": "windows_server_2022_sql_2022_express",
"group": "windows_2022_sql_exp_2022",
"blueprintId": "windows_server_2022_sql_2019_express",
"group": "windows_2022_sql_exp_2019",
"blueprintId": "windows_server_2016_sql_2016_express",
"group": "windows_2016_sql_exp",
有几种不同版本的 SQL Server Express 可用。我们在此使用最新的 SQL Server 版本 windows_server_2022_sql_2022_express。使用此蓝图创建 VPS。此外,--user-data 参数还会创建一个目录来存储 SQL Server 备份文件。--bundle-id 设置服务器的大小。
aws lightsail create-instances --instance-names pcgSQLServer \
--availability-zone us-west-2a \
--blueprint-id windows_server_2022_sql_2022_express \
--user-data "mkdir c:\backup" \
--bundle-id large_win_1_0
注意,此 SQL Server 实例并非托管型关系数据库服务 (RDS)。您必须自行处理系统或安全更新,并负责数据文件的备份。
模块 3:为数据和日志文件创建存储
数据库通常将数据文件和日志存储在连接到服务器的单独驱动器中。借助 Lightsail,您可以创建对象存储和数据块存储。块存储类似于物理驱动器,可以格式化为特定文件系统,也可以附加到服务器。在本节中,您将创建块存储。在下一节中,您将其附加到 VPS,并使用 NTFS 文件系统对其进行格式化。
步骤 1:创建块存储
在 Cloud9 终端中,使用 Amazon CLI 通过 aws lightsail create-disk 命令实例化存储。命名磁盘并设置可用区。
aws lightsail create-disk \
--disk-name sqlserver-data-and-logs \
--availability-zone us-west-2a \
--size-in-gb 32
如果成功,Lightsail 将返回状态消息。
{
"operations": [
{
"id": "14d4be4a-955f-45d0-81f7-7a5440195c54",
"resourceName": "sqlserver-data-and-logs",
"resourceType": "Disk",
"createdAt": "2023-08-02T01:52:51.867000+00:00",
"location": {
"availabilityZone": "us-west-2a",
"regionName": "us-west-2"
},
"isTerminal": false,
"operationType": "CreateDisk",
"status": "Started",
"statusChangedAt": "2023-08-02T01:52:52.128000+00:00"
}
]
}
步骤 2:将块存储附加到数据库服务器
将块存储附加到数据库服务器。服务器会将其识别为驱动器。
aws lightsail attach-disk \
--disk-name sqlserver-data-and-logs \
--disk-path /dev/xvdf \
--instance-name pcgSQLServer
附加磁盘时,它会返回一条确认操作的 JSON 消息。
{
"operations": [
... ,
{
"id": "e92ee8ac-45cf-4bae-a16b-ac55fea264c7",
"resourceName": "pcgSQLServer",
"resourceType": "Instance",
"createdAt": "2023-08-02T01:54:18.196000+00:00",
"location": {
"availabilityZone": "us-west-2a",
"regionName": "us-west-2"
},
"isTerminal": false,
"operationDetails": "sqlserver-data-and-logs",
"operationType": "AttachDisk",
"status": "Started",
"statusChangedAt": "2023-08-02T01:54:18.196000+00:00"
}
]
}
块存储已连接到服务器,但它现在还是未格式化的磁盘。您将使用 Windows Server 对其进行格式化。
模块 4:配置 SQL Server VPS
我们的 VPS 是一台 Windows Server。使用 Lightsail 控制台中的 RDP 按钮。在 pcgSQLServer 面板中选择终端图标。
注意:RDP 按钮可能需要 5 到 7 分钟才能激活,激活后您才可以连接到服务器。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/rdp-1.ea6e2fee0e32da50a60588af5ec4281457195093.png)
我们需要格式化磁盘来存储数据和日志文件。以下是使磁盘可供 Windows Server 使用的步骤。
步骤 1:查找已附加但未格式化的磁盘的编号
在 RDP 窗口中,打开 Powershell 窗口,并使用 Get-Disk commandlet 查找未格式化的磁盘,它已经附加完成,但处于脱机状态。
get-disk | Where-Object {$_.OperationalStatus -eq 'Offline' }
Number Friendly Name Serial Number HealthStatus OperationalStatus Total Size Partition Style
------ ------------- ------------- ------------ ----------------- ---------- ----------
1 AWS PVDISK vol0318528261ed8ca45 Healthy Offline 32 GB RAW
确定磁盘编号后,使用 New-Partition commandlet 初始化磁盘并对其进行分区。同时,这个 commandlet 还会分配一个驱动器号并使用整个磁盘。
Initialize-Disk -Number 1
New-Partition –DiskNumber 1 -AssignDriveLetter –UseMaximumSize
Format-Volume -DriveLetter D -FileSystem NTFS -NewFileSystemLabel Data
步骤 2:下载 Wide World Importers 示例数据库
Microsoft 分发一个示例 SQL Server 备份文件。我们使用这个文件来还原备份。实例化 SQL Server VPS 的过程自动创建了一个备份目录。我们将 Wide World Importers 备份文件下载到该目录。
$source = "https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak"
$dest = "C:\backup\WideWorldImporters-Full.bak"
Invoke-WebRequest -Uri $source -OutFile $dest
步骤 3:为数据和日志文件创建目录
Wide World Importers 数据库的数据文件和日志存储在单独的驱动器中。我们在附加的驱动器中创建目录。
mkdir D:\SQL_DATA
mkdir D:\SQL_LOGS
mkdir D:\SQL_LOGS\SQL2022
模块 5:从备份文件还原数据库
为了在 Powershell 中还原数据库,我们使用 Transact-SQL (T-SQL),它是 Microsoft 的 SQL 版本。使用 sqlcmd 实用工具,您就可以对 SQL Server 使用 T-SQL 命令。使用记事本或您喜欢的其他编辑器,将以下脚本保存到 C:\backup 目录中名为 restore_database.sql 的文件中。
USE [master]
GO
RESTORE DATABASE [WideWorldImporters] FROM DISK = N'C:\backup\WideWorldImporters-Full.bak'
WITH FILE = 1,
MOVE N'WWI_Primary' TO N'D:\SQL_Data\WideWorldImporters.mdf',
MOVE N'WWI_UserData' TO N'D:\SQL_Data\WideWorldImporters_UserData.ndf',
MOVE N'WWI_Log' TO N'D:\SQL_Logs\SQL2022\WideWorldImporters.ldf',
MOVE N'WWI_InMemory_Data_1' TO N'D:\SQL_Data\WideWorldImporters_InMemory_Data_1',
NOUNLOAD,
STATS = 5
GO
使用 sqlcmd 运行脚本。
sqlcmd -i C:\backup\restore_database.sql
如果还原成功,您将看到许多状态消息,其中最后一条是:
100 percent processed.
RESTORE DATABASE successfully processed 58496 pages in 4.218 seconds (108.343 MB/sec).
您可以使用 SQL Server Management Studio 验证还原是否成功,以及运行 SQL 查询。
在 Windows 的开始菜单中,打开 SQL Server Management Studio。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/sqlserver-studio-1.6237adeff98c1731bd0dab82830a665949ee2581.png)
启动 SQL Server Management Studio 之后,点击 File > Connect Object Explorer(文件 > 连接对象资源管理器)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/sqlserver-studio-2.bac632e26b2d8b3c58e5c74622497fbcba945484.png)
此时会打开 Connect to Server(连接至服务器)窗口。现在选择服务器名称。我们点击 Browse for more(浏览更多),然后选择 Database Engine(数据库引擎)下的服务器名称。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/sqlserver-studio-3.ee17ae2db22d4680712d57a55a144826a649e005.png)
我们使用 Windows Authentication,因此需要点击 Options(选项)按钮,再点击 Trust Server Certificate(信任服务器证书)。然后点击 Connect(连接)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/sqlserver-studio-4.f07b00d7b20c7eabc0a606307bf86b60fdc9d233.png)
将数据库连接到 SQL Server Management Studio 后,可以点击 New Query(新建查询)来查询 Wide World Importers 数据库。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/sqlserver-studio-5.774e418c7a011eaf36c38c0e4da5f2e194ee3ca5.png)
在查询窗口中,键入 SQL 查询式。此查询会列出 Website.Customers 视图中的所有行。
SELECT * FROM Website.Customers;
点击菜单中的 Execute(执行),即可执行查询。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/sqlserver-studio-6.41229f91be45abd70d5cbafdb77f5e55b345f793.png)
Results(结果)窗格显示视图中的行。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/sqlserver-studio-7.2bef994e24b2b418b0ab3a0a832489dd3e259f37.png)
恭喜!您已成功将 SQL Server 数据库迁移至云端。
清理资源
我们将删除 VPS、附加的磁盘和 Cloud9 环境,以避免产生额外费用。
步骤 1:删除 VPS
在 Lightsail 控制台中,点击 Instances(实例),然后点击 pcgSQLServer 中的三个点。点击 Delete(删除)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/delete-vps-1.421c6f293b3d30a7e47b37b3ac8df450b8d3a2af.png)
点击 Yes, delete(确认删除)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/delete-disk-2.3c241f23f083b1f23c7727b4ca827eed366e89aa.png)
步骤 2:删除磁盘
在 Lightsail 控制台中,点击 Storage(存储),点击 sqlserver-data-and-logs 中的三个点。点击 Delete(删除)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/delete-disk-1.0c74e068e4ed2f23c1857cc86a4c2e9f2d1c584c.png)
点击 Yes, delete(确认删除)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/delete-disk-2.3c241f23f083b1f23c7727b4ca827eed366e89aa.png)
步骤 3:删除 Cloud9 环境
在 Cloud9 控制台中,点击 pcg-database,然后点击 Delete(删除)。
![](https://d1.awsstatic.com/guoheng/migrate-a-sql-server-database-in-the-cloud/cloud9-environment-delete.58795d7e1405826c406d2c298985770107fabfa7.png)
已完成的目标
您在云环境中部署了 SQL Server,进行了一次数据库还原。但是,本教程的重点在于,您执行这些操作时是在终端内使用 Amazon CLI 和 Lightsail 插件。您在未使用 Console(控制台)的情况下完成了任务。如果您还想挑战自我,那么您可以尝试在完成本教程的过程中,通过编写脚本来部署 SQL Server、配置存储,以及编写 Powershell 脚本来还原数据库。了解 Amazon CLI 的使用方法是构建可重现、可测试基础设施的第一步。The Practical Cloud Guide(《实用云指南》)将使用此方法来构建和维护基础设施。
如果您想深入了解云端 SQL Server,不妨查看 Amazon RDS for SQL Server 研讨会,亲身体验亚马逊云科技的 SQL Server。
后续步骤
从 Lightsail 蓝图实例化 SQL Server 并不复杂。但是,您需要自行维护该实例,其中包括执行更新和备份。云数据中心可以选择全托管的解决方案,这是它和本地数据中心的一个重要区别。在托管解决方案中,云提供商负责维护资源。在后续教程中,您将部署用于扩展 Web 应用程序的关系数据库。
![Olawale Olaleye Olawale Olaleye](https://d1.awsstatic.com/xuefezha-jennie/mulu.34646cf00357268db464d54cd1f040ef56c42cbf.png)