遷移資料庫到SQLonLinuxDocker
問題引入
前一篇文章,菜鳥找到了SQL on Linux Docker容器銷燬後,容器中的資料庫檔案可以得以保留的方法,老鳥非常開心。所以,今天又提出了新的問題:“鳥兒,如果我想把我的資料庫從SQL on Windows遷移到SQL on Linux Docker,如何才能做到呢?”。
菜鳥一聽這個問題,頭腦迅速反應出資料庫遷移的兩種方法:備份還原和分離附加。就讓我們來試試吧。詳細的過程可以參見我錄製的Youku視訊:
12_SQLonLinux_Docker_Migration
構建SQL on Windows測試資料庫
為了測試從SQL on Windows遷移資料庫到SQL on Linux Docker的兩種方法:備份還原和資料庫附加。我們在SQL on Windows資料庫例項中建立兩個測試資料庫,TestAttach和TestBackRestore,然後分別在兩個資料庫下建立一張測試表,接下來插入兩條NEWID測試資料,最後檢視這兩條資料。
IF DB_ID(`TestAttach`) IS NULL
CREATE DATABASE TestAttach;
GO
USE TestAttach
GO
IF OBJECT_ID(`dbo.tb_Test`, `U`) IS NOT NULL
DROP TABLE dbo.tb_Test
GO
CREATE TABLE dbo.tb_Test(
RowID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY
,Name VARCHAR(36) NOT NULL
);
INSERT INTO dbo.tb_Test
SELECT NEWID() UNION ALL SELECT NEWID();
SELECT * FROM dbo.tb_Test;
IF DB_ID(`TestBackRestore`) IS NULL
CREATE DATABASE TestBackRestore;
GO
USE TestBackRestore
GO
IF OBJECT_ID(`dbo.tb_Test`, `U`) IS NOT NULL
DROP TABLE dbo.tb_Test
GO
CREATE TABLE dbo.tb_Test(
RowID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY
,Name VARCHAR(36) NOT NULL
);
INSERT INTO dbo.tb_Test
SELECT NEWID() UNION ALL SELECT NEWID();
SELECT * FROM dbo.tb_Test;
SELECT physical_name,* FROM sys.master_files
WHERE database_id = DB_ID(`TestAttach`);
執行結果截圖如下:
為了可以直接複製mdf和ldf檔案,我們需要下線資料庫TestAttach,然後備份資料庫TestBackRestore。
USE master
GO
ALTER DATABASE TestAttach SET OFFLINE;
USE master
GO
EXEC xp_create_subdir `C: emp`
GO
BACKUP DATABASE [TestBackRestore]
TO DISK = `C: empTestBackRestore_full_20170210.bak` WITH STATS = 2 ;
傳輸資料庫檔案
由於我是在Mac系統安裝Windows虛擬機器來測試的,所以,首先我需要將Windows虛擬機器中的檔案複製到Mac系統。比如:我將下面三個檔案複製到Mac的~/Downloads目錄:
C:SQL2K14_DATAMSSQL12.MSSQLSERVERMSSQLDATATestAttach.mdf
C:SQL2K14_DATAMSSQL12.MSSQLSERVERMSSQLDATATestAttach_log.ldf
C: empTestBackRestore_full_20170210.bak
接下來,我需要在Mac系統中,將這三個檔案複製到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
備份檔案、資料庫資料檔案和日誌檔案準備完畢後,接下來該是還原資料庫和附加資料庫了。
還原資料庫到SQL on Linux Docker
這個和SQL on Windows還原操作沒有什麼兩樣,思路還是先檢查備份檔案的完整性,然後使用Restore語句還原資料庫。使用SSMS連線到SQL on Linux Docker中,執行以下指令碼:
USE master
GO
--Verify backup file
RESTORE FILELISTONLY
FROM DISK = N`C:varoptmssqldataTestBackRestore_full_20170210.bak`;
RESTORE VERIFYONLY
FROM DISK = N`C:varoptmssqldataTestBackRestore_full_20170210.bak`;
-- Restore Database
USE master
GO
RESTORE DATABASE [TestBackRestore]
FROM DISK = N`C:varoptmssqldataTestBackRestore_full_20170210.bak`
WITH MOVE N`TestBackRestore` TO N`C:varoptmssqldataTestBackRestore.mdf`
,MOVE N`TestBackRestore_log` TO N`C:varoptmssqldataTestBackRestore_log.ldf`
,STATS=2
GO
最後是附加資料庫到SQL on Linux Docker的操作。
附加資料庫到SQL on Linux Docker
附加資料庫方法也和SQL on Windows一樣,使用Create Database for Attach方法。同樣,使用SSMS連線到SQL on Linux Docker,執行以下資料庫附加操作指令碼:
USE master
GO
-- Create database via attach
CREATE DATABASE [TestAttach]
ON ( FILENAME = N`C:varoptmssqldataTestAttach.mdf`),
( FILENAME = N`C:varoptmssqldataTestAttach_log.ldf`)
FOR ATTACH;
GO
最後確認
最後確認操作,只需要檢查下這兩個資料庫下的測試表資料是否和遷移之前一致即可。
SELECT * FROM TestAttach.dbo.tb_Test;
SELECT * FROM TestBackRestore.dbo.tb_Test;
對比遷移前後資料庫測試表中的資料是否一致:
從最後的確認結果來看,遷移前後的資料庫測試資料完全一致,本次遷移資料使用的兩種方法都是成功的,可靠的。
寫在最後
SQL on Windows上的資料庫,可以非常平滑的遷移到SQL on Linux Docker中來,這個是Windows版和Linux版資料庫可以任意選擇的前提。我們可以使用資料庫的備份還原和分離附件兩種方法來達到資料庫遷移的目的。
相關文章
- 遷移資料庫到ASM資料庫ASM
- oracle 遷移資料庫到asmOracle資料庫ASM
- 【資料遷移】RMAN遷移資料庫到ASM(二)切換資料檔案到ASM資料庫ASM
- 【資料遷移】RMAN遷移資料庫到ASM(三)遷移onlinelog等到ASM資料庫ASM
- 遷移資料庫檔案到ASM資料庫ASM
- 【資料遷移】RMAN遷移資料庫到ASM(一)建立ASM磁碟組資料庫ASM
- 使用RMAN遷移資料庫到異機資料庫
- 【遷移】使用rman遷移資料庫資料庫
- 資料庫遷移資料庫
- 遷移已存在的資料庫到ASM中資料庫ASM
- 資料庫遷移 :理解資料庫
- laravel資料庫遷移Laravel資料庫
- Odoo遷移資料庫Odoo資料庫
- redis資料庫遷移Redis資料庫
- Cacti 遷移資料庫資料庫
- 資料庫遷移方案資料庫
- ORACLE資料庫遷移Oracle資料庫
- 遷移資料庫成功!資料庫
- 建立資料庫遷移資料庫
- 資料庫-oracle-資料庫遷移資料庫Oracle
- 使用SQL Developer 遷移異構資料庫到OracleSQLDeveloper資料庫Oracle
- Oracle資料庫資料遷移流程Oracle資料庫
- 資料庫遷移神器——Flyway資料庫
- 遷移MySQL 5.7資料庫MySql資料庫
- 用rman遷移資料庫資料庫
- 資料庫遷移手記資料庫
- django資料庫遷移-15Django資料庫
- SQL Server資料庫遷移SQLServer資料庫
- mysql資料庫遷移 mysqldumpMySql資料庫
- dm資料庫遷移命令資料庫
- 遷移資料庫的檔案到不同路徑(轉)資料庫
- 從 SQL Server 到 MySQL (一):異構資料庫遷移ServerMySql資料庫
- 使用RMAN遷移檔案系統資料庫到ASM資料庫ASM
- Django應用資料庫從MySQL到PostgreSql的遷移Django資料庫MySql
- 雲資料庫管理與資料遷移資料庫
- 用rman從檔案系統遷移資料庫到asm資料庫ASM
- 騰訊雲 雲資料庫遷移資料庫
- laravel 資料庫遷移時報錯Laravel資料庫