MSSQL On Linux备份与还原

简介: # 问题引出 这天老鸟喜笑颜开的找到菜鸟:“听说微软11月16号发布了MSSQL ON Linux版本了?要不要尝尝鲜?”。 “老大,我已经尝过了,你不知道我写了一篇《Happy Birthday to MSSQL On Linux》?”,这次换菜鸟得意洋洋了。 “不错嘛,那你要不要研究看看MSSQL On Linux备份与还原,看看和Windows上有没有什么区别。”,老鸟总是能给菜鸟找到

问题引出

这天老鸟喜笑颜开的找到菜鸟:“听说微软11月16号发布了MSSQL ON Linux版本了?要不要尝尝鲜?”。
“老大,我已经尝过了,你不知道我写了一篇《Happy Birthday to MSSQL On Linux》?”,这次换菜鸟得意洋洋了。
“不错嘛,那你要不要研究看看MSSQL On Linux备份与还原,看看和Windows上有没有什么区别。”,老鸟总是能给菜鸟找到活干。

备份与还原

菜鸟虽然对MSSQL On Linux也很有兴趣,并且也想测试下备份与还原功能。但是,被老鸟赶着走总觉得不爽快。不爽归不爽,老鸟安排的任务还是要完成的,要不然等会儿老鸟不爽起来,后果很严重。

备份

菜鸟的备份过程非常简单:创建表table1 => 做一个完全备份 => 创建表table2 => 做一个差异备份 => 创建表table3 => 做一个事务日志备份。

USE master
GO

--If not exists, create testing database
IF DB_ID('TestDB') IS NULL
    CREATE DATABASE TestDB;
GO

--create the 1st table
USE TestDB
GO
IF OBJECT_ID('dbo.Table1', 'U') IS NOT NULL
    DROP TABLE dbo.Table1
GO

CREATE TABLE dbo.Table1(
    RowID INT
)
GO

--make a full backup
BACKUP DATABASE [TestDB] 
TO  DISK = N'C:\var\opt\mssql\data\TestDB_full.bak' 
WITH NOFORMAT, NOINIT,  
NAME = N'TestDB-Full Database Backup', SKIP, 
NOREWIND, NOUNLOAD,  STATS = 10
GO

--create the second table
IF OBJECT_ID('dbo.Table2', 'U') IS NOT NULL
    DROP TABLE dbo.Table2
GO

CREATE TABLE dbo.Table2(
    RowID INT
)
GO

--take a diff backup
BACKUP DATABASE [TestDB] 
TO  DISK = N'C:\var\opt\mssql\data\TestDB_diff.bak' 
WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  
NAME = N'TestDB-Differential Database Backup', SKIP, 
NOREWIND, NOUNLOAD,  STATS = 10
GO

--create the third table
IF OBJECT_ID('dbo.Table3', 'U') IS NOT NULL
    DROP TABLE dbo.Table3
GO

CREATE TABLE dbo.Table3(
    RowID INT
)
GO

--take transaction log backup
BACKUP LOG [TestDB] 
TO  DISK = N'C:\var\opt\mssql\data\TestDB_log.bak' 
WITH NOFORMAT, NOINIT,  
NAME = N'TestDB-Transaction Log  Backup', SKIP, 
NOREWIND, NOUNLOAD,  STATS = 10
GO

备份文件在Linux系统中的位置:

[root@localhost ~]# ls /var/opt/mssql/data/ | grep bak
TestDB_diff.bak
TestDB_full.bak
TestDB_log.bak

还原

数据库完全备份,差异备份和事务日志备份完毕后,接下来菜鸟做了还原的测试,思路是:删除测试数据库 => 还原数据库完全备份文件 => 还原差异备份文件 => 还原事务日志备份文件 => 检查数据库中是不是三个表都存在,如果存在则成功,否则失败。

--==============next is for restore operation
USE master
GO

--drop database if exists for testing
IF DB_ID('TestDB') IS NOT NULL
    DROP DATABASE TestDB;
GO

--restore full database backup
RESTORE DATABASE [TestDB] 
FROM  DISK = 'C:\var\opt\mssql\data\TestDB_full.bak'  WITH  FILE = 1,  
MOVE N'TestDB' TO N'C:\var\opt\mssql\data\TestDB.mdf',  
MOVE N'TestDB_log' TO N'C:\var\opt\mssql\data\TestDB_log.ldf',  
NORECOVERY,  NOUNLOAD,  REPLACE,  STATS = 10
GO

--restore the diff backup
RESTORE DATABASE [TestDB] 
FROM  DISK = N'C:\var\opt\mssql\data\TestDB_diff.bak' WITH  FILE = 1
,  NORECOVERY,  NOUNLOAD,  STATS = 10
GO

--restore the transaction log backup
RESTORE LOG [TestDB] 
FROM  DISK = N'C:\var\opt\mssql\data\TestDB_log.bak' WITH  FILE = 1
,  NOUNLOAD,  STATS = 10
GO

查看结果,从结果来看三个表存在数据库TestDB中,结果成功如预期。
01.png

写在最后

从整个测试过程来看,MSSQL On Linux与MSSQL On Windows的备份还原功能保持一致,甚至连语法格式都一样。这种风格的一惯性和如丝般平顺过度的策略非常赞。

目录
相关文章
|
12天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
31 3
|
12天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
26 3
|
3月前
|
存储 Linux 数据库
在Linux中,什么是快照备份?
在Linux中,什么是快照备份?
|
3月前
|
存储 Linux 数据安全/隐私保护
在Linux中,如何创建文件系统的备份?
在Linux中,如何创建文件系统的备份?
|
3月前
|
Linux 数据库
在Linux中,什么是冷备份和热备份?
在Linux中,什么是冷备份和热备份?
|
3月前
|
Unix Linux 测试技术
在Linux中,如何恢复备份的文件?
在Linux中,如何恢复备份的文件?
|
3月前
|
存储 监控 安全
在Linux中,如何进行系统备份?
在Linux中,如何进行系统备份?
|
3月前
|
存储 Linux 开发工具
在Linux中,如何备份某个用户的任务计划?
在Linux中,如何备份某个用户的任务计划?
|
3月前
|
Linux
在Linux中,如何进行备份或归档文件(tar 命令)?
在Linux中,如何进行备份或归档文件(tar 命令)?
|
3月前
|
Linux KVM 虚拟化
在Linux中,如何进行虚拟机和容器的备份和迁移?
在Linux中,如何进行虚拟机和容器的备份和迁移?
下一篇
无影云桌面