迁移数据库到SQL on Linux Docker
問題引入
前一篇文章,菜鳥找到了SQL on Linux Docker容器銷毀后,容器中的數(shù)據(jù)庫文件可以得以保留的方法,老鳥非常開心。所以,今天又提出了新的問題:“鳥兒,如果我想把我的數(shù)據(jù)庫從SQL on Windows遷移到SQL on Linux Docker,如何才能做到呢?”。
菜鳥一聽這個(gè)問題,頭腦迅速反應(yīng)出數(shù)據(jù)庫遷移的兩種方法:備份還原和分離附加。就讓我們來試試吧。詳細(xì)的過程可以參見我錄制的Youku視頻:http://v.youku.com/v_show/id_XMjUwNzQyNTU4OA==.html
構(gòu)建SQL on Windows測試數(shù)據(jù)庫
為了測試從SQL on Windows遷移數(shù)據(jù)庫到SQL on Linux Docker的兩種方法:備份還原和數(shù)據(jù)庫附加。我們在SQL on Windows數(shù)據(jù)庫實(shí)例中創(chuàng)建兩個(gè)測試數(shù)據(jù)庫,TestAttach和TestBackRestore,然后分別在兩個(gè)數(shù)據(jù)庫下創(chuàng)建一張測試表,接下來插入兩條NEWID測試數(shù)據(jù),最后查看這兩條數(shù)據(jù)。
IF DB_ID('TestAttach') IS NULL ? ?CREATE DATABASE TestAttach; GOUSE TestAttachGOIF OBJECT_ID('dbo.tb_Test', 'U') IS NOT NULLDROP TABLE dbo.tb_TestGOCREATE TABLE dbo.tb_Test(RowID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,Name VARCHAR(36) NOT NULL);INSERT INTO dbo.tb_TestSELECT NEWID() UNION ALL SELECT NEWID();SELECT * FROM dbo.tb_Test;IF DB_ID('TestBackRestore') IS NULL ? ?CREATE DATABASE TestBackRestore; GOUSE TestBackRestoreGOIF OBJECT_ID('dbo.tb_Test', 'U') IS NOT NULLDROP TABLE dbo.tb_TestGOCREATE TABLE dbo.tb_Test(RowID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY,Name VARCHAR(36) NOT NULL);INSERT INTO dbo.tb_TestSELECT NEWID() UNION ALL SELECT NEWID();SELECT * FROM dbo.tb_Test;SELECT physical_name,* FROM sys.master_filesWHERE database_id = DB_ID('TestAttach');執(zhí)行結(jié)果截圖如下:
為了可以直接復(fù)制mdf和ldf文件,我們需要下線數(shù)據(jù)庫TestAttach,然后備份數(shù)據(jù)庫TestBackRestore。
USE masterGOALTER DATABASE TestAttach SET OFFLINE;USE masterGOEXEC xp_create_subdir 'C:\temp\' GO BACKUP DATABASE [TestBackRestore] ? ?TO DISK = 'C:\temp\TestBackRestore_full_20170210.bak' WITH STATS = 2 ;傳輸數(shù)據(jù)庫文件
由于我是在Mac系統(tǒng)安裝Windows虛擬機(jī)來測試的,所以,首先我需要將Windows虛擬機(jī)中的文件復(fù)制到Mac系統(tǒng)。比如:我將下面三個(gè)文件復(fù)制到Mac的~/Downloads目錄:
C:\SQL2K14_DATA\MSSQL12.MSSQLSERVER\MSSQL\DATA\TestAttach.mdf C:\SQL2K14_DATA\MSSQL12.MSSQLSERVER\MSSQL\DATA\TestAttach_log.ldf C:\temp\TestBackRestore_full_20170210.bak接下來,我需要在Mac系統(tǒng)中,將這三個(gè)文件復(fù)制到SQL on Linux Docker容器中,方法如下:
docker cp ~/Downloads/TestAttach.mdf linuxsql41433:/var/opt/mssql/data/TestAttach.mdf docker cp ~/Downloads/TestAttach_log.ldf linuxsql41433:/var/opt/mssql/data/TestAttach_log.ldf docker cp ~/Downloads/TestBackRestore_full_20170210.bak linuxsql41433:/var/opt/mssql/data/TestBackRestore_full_20170210.bak備份文件、數(shù)據(jù)庫數(shù)據(jù)文件和日志文件準(zhǔn)備完畢后,接下來該是還原數(shù)據(jù)庫和附加數(shù)據(jù)庫了。
還原數(shù)據(jù)庫到SQL on Linux Docker
這個(gè)和SQL on Windows還原操作沒有什么兩樣,思路還是先檢查備份文件的完整性,然后使用Restore語句還原數(shù)據(jù)庫。使用SSMS連接到SQL on Linux Docker中,執(zhí)行以下腳本:
USE masterGO--Verify backup fileRESTORE FILELISTONLY FROM DISK = N'C:\var\opt\mssql\data\TestBackRestore_full_20170210.bak';RESTORE VERIFYONLY FROM DISK = N'C:\var\opt\mssql\data\TestBackRestore_full_20170210.bak';-- Restore DatabaseUSE masterGORESTORE DATABASE [TestBackRestore]FROM DISK = N'C:\var\opt\mssql\data\TestBackRestore_full_20170210.bak'WITH MOVE N'TestBackRestore' TO N'C:\var\opt\mssql\data\TestBackRestore.mdf',MOVE N'TestBackRestore_log' TO N'C:\var\opt\mssql\data\TestBackRestore_log.ldf',STATS=2GO最后是附加數(shù)據(jù)庫到SQL on Linux Docker的操作。
附加數(shù)據(jù)庫到SQL on Linux Docker
附加數(shù)據(jù)庫方法也和SQL on Windows一樣,使用Create Database for Attach方法。同樣,使用SSMS連接到SQL on Linux Docker,執(zhí)行以下數(shù)據(jù)庫附加操作腳本:
USE masterGO-- Create database via attachCREATE DATABASE [TestAttach] ? ?ON ( FILENAME = N'C:\var\opt\mssql\data\TestAttach.mdf'),( FILENAME = N'C:\var\opt\mssql\data\TestAttach_log.ldf') ? ?FOR ATTACH; GO最后確認(rèn)
最后確認(rèn)操作,只需要檢查下這兩個(gè)數(shù)據(jù)庫下的測試表數(shù)據(jù)是否和遷移之前一致即可。
SELECT * FROM TestAttach.dbo.tb_Test;SELECT * FROM TestBackRestore.dbo.tb_Test;對比遷移前后數(shù)據(jù)庫測試表中的數(shù)據(jù)是否一致:
從最后的確認(rèn)結(jié)果來看,遷移前后的數(shù)據(jù)庫測試數(shù)據(jù)完全一致,本次遷移數(shù)據(jù)使用的兩種方法都是成功的,可靠的。
寫在最后
SQL on Windows上的數(shù)據(jù)庫,可以非常平滑的遷移到SQL on Linux Docker中來,這個(gè)是Windows版和Linux版數(shù)據(jù)庫可以任意選擇的前提。我們可以使用數(shù)據(jù)庫的備份還原和分離附件兩種方法來達(dá)到數(shù)據(jù)庫遷移的目的。
相關(guān)文章:?
SQL Server 急救包(First Responder Kit)入門教程
SQL Server on Linux 理由淺析
SQLServer On Linux Package List on CentOS
SQL Server on Linux的文件和目錄結(jié)構(gòu)
個(gè)性化配置你的SQL Server on Linux
SQL on Linux Run on Docker
如何使Mac Docker支持SQL on Linux容器Volume特性
原文地址:https://yq.aliyun.com/articles/69550
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的迁移数据库到SQL on Linux Docker的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LEANSOFT领航员 – 基于Dock
- 下一篇: 当初怎么就入了VS的坑