Welcome 微信登录

首页 / 数据库 / MySQL / MSSQL On Linux备份与还原

问题引出

这天老鸟喜笑颜开的找到菜鸟:“听说微软11月16号发布了MSSQL ON Linux版本了?要不要尝尝鲜?”。
“老大,我已经尝过了,你不知道我写了一篇《Happy Birthday to MSSQL On Linux》?”,这次换菜鸟得意洋洋了。
“不错嘛,那你要不要研究看看MSSQL On Linux备份与还原,看看和Windows上有没有什么区别。”,老鸟总是能给菜鸟找到活干。Ubuntu 16.04下安装SQL Server for Linux http://www.linuxidc.com/Linux/2016-11/137328.htm从Windows迁移SQL Server数据库到Linux  http://www.linuxidc.com/Linux/2016-12/138261.htm

备份与还原

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

备份

菜鸟的备份过程非常简单:创建表table1 => 做一个完全备份 => 创建表table2 => 做一个差异备份 => 创建表table3 => 做一个事务日志备份。USE masterGO--If not exists, create testing databaseIF DB_ID("TestDB") IS NULLCREATE DATABASE TestDB;GO--create the 1st tableUSE TestDBGOIF OBJECT_ID("dbo.Table1", "U") IS NOT NULLDROP TABLE dbo.Table1GOCREATE TABLE dbo.Table1(RowID INT)GO--make a full backupBACKUP DATABASE [TestDB] TODISK = N"C:varoptmssqldataTestDB_full.bak" WITH NOFORMAT, NOINIT,NAME = N"TestDB-Full Database Backup", SKIP, NOREWIND, NOUNLOAD,STATS = 10GO--create the second tableIF OBJECT_ID("dbo.Table2", "U") IS NOT NULLDROP TABLE dbo.Table2GOCREATE TABLE dbo.Table2(RowID INT)GO--take a diff backupBACKUP DATABASE [TestDB] TODISK = N"C:varoptmssqldataTestDB_diff.bak" WITHDIFFERENTIAL , NOFORMAT, NOINIT,NAME = N"TestDB-Differential Database Backup", SKIP, NOREWIND, NOUNLOAD,STATS = 10GO--create the third tableIF OBJECT_ID("dbo.Table3", "U") IS NOT NULLDROP TABLE dbo.Table3GOCREATE TABLE dbo.Table3(RowID INT)GO--take transaction log backupBACKUP LOG [TestDB] TODISK = N"C:varoptmssqldataTestDB_log.bak" WITH NOFORMAT, NOINIT,NAME = N"TestDB-Transaction LogBackup", SKIP, NOREWIND, NOUNLOAD,STATS = 10GO备份文件在Linux系统中的位置:[root@localhost ~]# ls /var/opt/mssql/data/ | grep bakTestDB_diff.bakTestDB_full.bakTestDB_log.bak

还原

数据库完全备份,差异备份和事务日志备份完毕后,接下来菜鸟做了还原的测试,思路是:删除测试数据库 => 还原数据库完全备份文件 => 还原差异备份文件 => 还原事务日志备份文件 => 检查数据库中是不是三个表都存在,如果存在则成功,否则失败。--==============next is for restore operationUSE masterGO--drop database if exists for testingIF DB_ID("TestDB") IS NOT NULLDROP DATABASE TestDB;GO--restore full database backupRESTORE DATABASE [TestDB] FROMDISK = "C:varoptmssqldataTestDB_full.bak"WITHFILE = 1,MOVE N"TestDB" TO N"C:varoptmssqldataTestDB.mdf",MOVE N"TestDB_log" TO N"C:varoptmssqldataTestDB_log.ldf",NORECOVERY,NOUNLOAD,REPLACE,STATS = 10GO--restore the diff backupRESTORE DATABASE [TestDB] FROMDISK = N"C:varoptmssqldataTestDB_diff.bak" WITHFILE = 1,NORECOVERY,NOUNLOAD,STATS = 10GO--restore the transaction log backupRESTORE LOG [TestDB] FROMDISK = N"C:varoptmssqldataTestDB_log.bak" WITHFILE = 1,NOUNLOAD,STATS = 10GO查看结果,从结果来看三个表存在数据库TestDB中,结果成功如预期。

写在最后

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