在本文中,我们将学习如何在CentOS中备份和恢复SQL数据库。本文是关于CentOS上管理SQL Server主题的第二篇文章。在我的前一篇文章《在CentOS上安装SQL Server》中,我们学习了如何在CentOS中安装和创建SQL数据库。
1.使用SQL Server management studio在windows 10和CentOS Linux之间备份和恢复SQL数据库
2.使用SQL server data Tools将windows 10上的SQL server实例的数据复制到CentOS上的SQL实例
3.使用SQL server导入和导出向导将windows 10上的SQL server实例的数据复制到CentOS上的SQL实例
在本文中,我们将学习将SQL Server数据从Windows复制到CentOS的备份和恢复方法。
我在工作站上创建了一个虚拟机,并安装了CentOS 8.0。我在Windows 10的SQL Server实例上下载并配置了stackoverflow2010数据库。
我们正在使用WinSCP软件将备份文件从windows复制到Linux。它是一个免费的SFTP客户端,用于在本地和远程计算机之间复制数据。要复制数据,它使用以下文件传输协议。
1.安全文件传输协议(SFTP)
2.文件传输协议(FTP)
3.安全复制协议(SCP)
4.AmazonS3:这是一种云存储服务。您可以在Amazon S3和本地计算机之间复制
5.WebDAV:Web分发创作和版本控制。它是用于远程文件编辑和修改的HTTP协议的扩展。
您可以从这里下载WinSCP。安装简单且具有交互性。
查看数据库架构
在从源和目标复制SQL数据库之前,建议检查数据库文件、模式结构和数据。运行以下查询集。
运行以下查询以查看文件和文件组列表
USE stackoverflow2010
go
SELECT fg.NAME AS [File Group Name],
sdf.NAME AS [Logical File Name],
sdf.physical_name AS [File Location],
size / 128 AS [File size]
FROM sys.database_files sdf
INNER JOIN sys.filegroups fg
ON sdf.data_space_id = fg.data_space_id
输出
运行以下查询以查看表和数据列表。
SELECT
t.Name AS TableName,
sch.Name AS SchemaName,
part.Rows AS RowCounts
FROM
sys.tables t
INNER JOIN sys.indexes indx ON t.object_id = indx.object_id
INNER JOIN sys.partitions part ON indx.object_id = part.object_id AND indx.index_id = part.index_id
INNER JOIN sys.allocation_units a ON part.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas sch ON t.schema_id = sch.schema_id
WHERE
t.Name NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND indx.object_id > 255
GROUP BY
t.Name, sch.Name, part.Rows
ORDER BY
t.Name;
GO
查询输出
让我们生成stackoverflow2010数据库的仅拷贝备份。备份在D:\SQLBackups\StackOverflow文件夹中生成。
BACKUP DATABASE [StackOverflow2010] TO DISK =
'D:\SQLBackups\StackOverflow\StackOverflow2010.bak' WITH copy_only, stats=5
生成备份后,让我们将其复制到CentOS。我在Linux的根目录中创建了一个名为SQLServer的目录。目录路径为/SQLServer。我已经在/SQLServer目录中创建了另一个名为SQLBackup的目录。我们正在/SQLServer/SQLBackup目录中复制备份。通过运行以下命令创建目录。
[root@localhost/]#mkdir/SQLServer
[root@localhost/]#mkdir/SQLServer/SQLBackup
该目录对名为root的用户具有读取、写入和执行权限。要查看权限,可以运行ls-l命令。
[root@localhost/]#ls-l/SQLServer/
命令输出
现在,让我们复制备份文件。启动WinSCP。首先,我们必须配置一个会话来在服务器之间复制文件。在登录屏幕上,您可以提供登录详细信息。输入适当的配置值以连接到CentOS文件共享。输入以下配置参数值。
1.文件协议:指定适当的文件传输协议。在我们的例子中,我们使用的是SFTP协议,所以我们从下拉列表中选择了SFTP。
2.主机名和端口:指定要连接的计算机的主机名/IP地址和端口。我们正在连接到我的工作站,IP地址是192.168.1.2。因此,我指定了192.168.2.2,端口号是22。
3.用户名:指定远程计算机的用户名。我使用root用户进行连接,所以我输入了root作为用户名。
4.密码:指定连接到远程计算机的适当密码。我已输入根用户的密码。
单击登录。以下是登录屏幕的屏幕截图。
我们可以将备份文件在D:\SQLBackup\Stackoverflow文件夹之间拖放到/SQLServer/SQLBackup目录。请参见下图。
上传过程开始。
复制备份文件后,让我们检查备份文件是否已复制。此外,我们还必须检查备份文件的权限。运行以下命令。
[root@localhost/]#ls-l/SQLServer/SQLBackup/
输出
如上图所示,备份文件已复制,权限也已正确应用。让我们在CentOS上恢复SQL Server中的数据库。为此,请运行以下restore命令。
USE [master]
RESTORE DATABASE [StackOverflow2010] FROM
DISK = N'/SQLServer/SQLBackup/StackOverflow2010.bak' WITH FILE = 1,
MOVE N'StackOverflow2010' TO N'/var/opt/mssql/data/StackOverflow2010.mdf',
MOVE N'fg_posts_data' TO N'/var/opt/mssql/data/fg_posts_data.ndf',
MOVE N'Stackoverflow2010_Posts' TO N'/var/opt/mssql/data/Stackoverflow2010_Posts.ndf',
MOVE N'StackOverflow2010_log' TO N'/var/opt/mssql/data/StackOverflow2010_log.ldf',
MOVE N'DF_MemoryOptimized_Posts' TO N'/var/opt/mssql/data/FG_MemoryOptimized_Posts',
NOUNLOAD, STATS = 5
GO
SQL数据库恢复后,让我们运行几个查询来验证数据库是否成功恢复。
运行以下查询以查看文件和文件组列表
USE stackoverflow2010
go
SELECT fg.NAME AS [File Group Name],
sdf.NAME AS [Logical File Name],
sdf.physical_name AS [File Location],
size / 128 AS [File size]
FROM sys.database_files sdf
INNER JOIN sys.filegroups fg
ON sdf.data_space_id = fg.data_space_id
查询输出
如您所见,创建了文件组。现在,运行下面的查询以查看表和数据列表。
SELECT
t.Name AS TableName,
sch.Name AS SchemaName,
part.Rows AS RowCounts
FROM
sys.tables t
INNER JOIN sys.indexes indx ON t.object_id = indx.object_id
INNER JOIN sys.partitions part ON indx.object_id = part.object_id AND indx.index_id = part.index_id
INNER JOIN sys.allocation_units a ON part.partition_id = a.container_id
LEFT OUTER JOIN sys.schemas sch ON t.schema_id = sch.schema_id
WHERE
t.Name NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND indx.object_id > 255
GROUP BY
t.Name, sch.Name, part.Rows
ORDER BY
t.Name;
GO
查询输出
如您所见,表和数据已成功恢复。
总结
本文介绍如何将数据库的数据从Windows 10复制到CentOS。我已经解释了一种备份和恢复数据库的方法。假设您计划将SQL Server的操作系统从Windows Server迁移到Linux。在这种情况下,本文将帮助您设置一个开发环境,以帮助您设置开发环境。在下一篇文章中,我们将学习如何使用SQL Server导入导出向导将SQL数据库从Windows 10复制到CentOS。
查看更多
ApexSQL Complete是一个SQL代码完整工具,它包括诸如代码段、SQL自动替换、选项卡导航、保存的查询等功能,适用于SSMS和Visual Studio
关于作者
Nisarg Upadhyay是一名SQL Server数据库管理员和Microsoft认证的专业人员,拥有8年以上的SQL Server管理经验和2年以上的Oracle 10g数据库管理经验。
他在数据库设计、性能调优、备份和恢复、HA和DR设置、数据库迁移和升级方面拥有专业知识。可以联系到他nisargupadhyay87@outlook.com
原文标题:Manage SQL Databases in CentOS: Backup and Restore SQL Database
原文作者:Nisarg Upadhyay
原文链接:https://www.sqlshack.com/manage-sql-databases-in-centos-backup-and-restore-sql-database/