暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在CentOS中管理SQL数据库:备份和恢复SQL数据库

原创 eternity 2022-09-26
996

在本文中,我们将学习如何在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 
复制

输出

image.png

运行以下查询以查看表和数据列表。

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
复制

查询输出

image.png

让我们生成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/

复制

命令输出

image.png

现在,让我们复制备份文件。启动WinSCP。首先,我们必须配置一个会话来在服务器之间复制文件。在登录屏幕上,您可以提供登录详细信息。输入适当的配置值以连接到CentOS文件共享。输入以下配置参数值。

1.文件协议:指定适当的文件传输协议。在我们的例子中,我们使用的是SFTP协议,所以我们从下拉列表中选择了SFTP。

2.主机名和端口:指定要连接的计算机的主机名/IP地址和端口。我们正在连接到我的工作站,IP地址是192.168.1.2。因此,我指定了192.168.2.2,端口号是22。

3.用户名:指定远程计算机的用户名。我使用root用户进行连接,所以我输入了root作为用户名。

4.密码:指定连接到远程计算机的适当密码。我已输入根用户的密码。

单击登录。以下是登录屏幕的屏幕截图。

image.png

我们可以将备份文件在D:\SQLBackup\Stackoverflow文件夹之间拖放到/SQLServer/SQLBackup目录。请参见下图。

image.png

上传过程开始。

image.png

复制备份文件后,让我们检查备份文件是否已复制。此外,我们还必须检查备份文件的权限。运行以下命令。

[root@localhost/]#ls-l/SQLServer/SQLBackup/

输出

image.png

如上图所示,备份文件已复制,权限也已正确应用。让我们在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
复制

查询输出

image.png

如您所见,创建了文件组。现在,运行下面的查询以查看表和数据列表。

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
复制

查询输出

image.png

如您所见,表和数据已成功恢复。

总结

本文介绍如何将数据库的数据从Windows 10复制到CentOS。我已经解释了一种备份和恢复数据库的方法。假设您计划将SQL Server的操作系统从Windows Server迁移到Linux。在这种情况下,本文将帮助您设置一个开发环境,以帮助您设置开发环境。在下一篇文章中,我们将学习如何使用SQL Server导入导出向导将SQL数据库从Windows 10复制到CentOS。

查看更多

ApexSQL Complete是一个SQL代码完整工具,它包括诸如代码段、SQL自动替换、选项卡导航、保存的查询等功能,适用于SSMS和Visual Studio

关于作者

image.png

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/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论