在Docker上安裝MSSQL主要包含了以下幾個步驟:
1.下載鏡像
2.創建容器並運行
3.安裝SQL客戶端
4.執行SQL還原DB
約定:
1.宿主主機Win10
2.虛擬機Centos,Centos版本必須>=7.0,本文使用7.6版本
3.容器安裝到虛擬機里面
4.容器名稱為mssql2017
5.mssql秘密設定為TYdemo@2020
6.虛擬機目錄 /opt/mssql 映射到容器 /var/opt/mssql ,里面包含了 data,log
准備:
mkdir /opt/mssql/
mkdir /opt/mssql/backup
win10備份一個SQL庫,暫定取名為AAA_v3.bak
操作:
1.下載鏡像
鏡像1:
docker pull microsoft/mssql-server-linux:2017-latest
鏡像2:
docker pull mcr.microsoft.com/mssql/server:2017-latest
2.啟動容器
容器1:
docker run --name mssql2017 -m 1024m -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=TYdemo@2020' -p 1433:1433 --restart=always -v /opt/mssql/:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest
容器2:
docker run --name mssql2017 -m 1024m -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=TYdemo@2020' -p 1433:1433 --restart=always -v /opt/mssql/:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
啟動代理
docker exec -it mssql2017 /bin/bash
/opt/mssql/bin/mssql-conf set sqlagent.enabled true
保存退出
重啟服務
systemctl restart mssql-server.service
3.備份准備
cp 數據庫備份文件到虛擬機/opt/mssql/backup/目錄,備份名叫名稱不變
4.客戶端安裝
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo
yum install -y mssql-tools
5.環境變量
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
6.端口放行
注意:基於iptables和firewall-cmd的操作方式略為不同,端口1433放行,具體操作省略;此處可用natcat連接測試了。
7.查看備份
查看備份邏輯名稱,口令如下:
sqlcmd -S '127.0.0.1,1433' -U SA -P 'TYdemo@2020' -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/AAA.bak"' | tr -s ' ' | cut -d ' ' -f 1-2
LogicalName PhysicalName
----------------------------------------------------------------------------------------------------------------
AAA_v1 D:\SqlData\data\MSSQL11.MSSQLSERVER\MSSQL\DATA\AAA_v3.mdf
AAA_v1_log D:\SqlData\data\MSSQL11.MSSQLSERVER\MSSQL\DATA\AAA_v3_1.ldf
注意紅色出名字
8.DB還原
8.1SQL方式還原
RESTORE DATABASE [AAA_v3] FROM DISK = N'/var/opt/mssql/backup/AAA_v3.bak' \
WITH FILE = 1, MOVE N'AAA_v1' TO N'/var/opt/mssql/data/AAA_v3.mdf', \
MOVE N'AAA_v1_log' TO N'/var/opt/mssql/data/AAA_v3_1.ldf', NOUNLOAD, REPLACE, STATS = 5
8.2SQLCMD方式還原
sqlcmd -S '127.0.0.1,1433' -U SA -P 'TYdemo@2020' \ -Q 'RESTORE DATABASE [AAA_v3] FROM DISK = N"/var/opt/mssql/backup/AAA_v3.bak" \ WITH FILE = 1, MOVE N"AAA_v1" TO N"/var/opt/mssql/data/AAA_v3.mdf", \ MOVE N"AAA_v1_log" TO N"/var/opt/mssql/data/AAA_v3_1.ldf", NOUNLOAD, REPLACE, STATS = 5'
8.3SSMS方式還原
和在Window提供的MSSQL服務的還原模式一模一樣;區別在於選擇備份集的路徑為Linux下面的路徑格式,MDF,LDF文件指定的路徑應符合Linux的路徑格式
8.4連接測試
通過前面的操作基本可以實現數據的訪問了。
9.操作結束