当前位置:网站首页>如何实现容器内的SqlServer的数据库迁移
如何实现容器内的SqlServer的数据库迁移
2022-06-24 15:33:00 【独家雨天】
理解如何备份和恢复在Docker中的SqlServer中的database。
预处理:
- Docker engine 1.8 及以上
- 最小2G磁盘空间和2G的内存空间
- 具有超级用户权限
- 对Docker有些基本的概念和熟悉基本操作
如何在Docker容器内备份和恢复数据库
安装并运行数据库
根据自己的需求指定SqlServer版本
docker pull microsoft/mssql-server-linux:2017-latest
然后在Docker中后台运行SqlServer容器。
docker run -e ‘ACCEPT_EULA=Y’ -e ‘MSSQL_SA_PASSWORD=SQLShack$2018’ –name shackdemo1 -p 1401:1433 -d microsoft/mssql-server-linux:latest
连接数据库
容器启动之后,进入SqlServer容器内。
docker exec –it shackdemo1 bash
进入容器之后 ,寻找sqlcmd命令。在Docker启动的sqlserver 服务器中,该脚本存放在 /opt/mssql-tools/bin/sqlcmd中。下面主要翻译和说明下sqlcmd命令的重要参数。
例如,连接本地的SqlServer服务器中的SQLTestDB数据库。输入命令为
sqlcmd -S 127.0.0.1 -U sa -d SQLTestDB -P Password123
主要命令:
- -S 表示SqlServer服务器的地址
- -U 表示SqlServer数据库的用户名
- -d 表示这次操作使用的数据库
- -P 表示连接该数据库的用户密码
- -Q 表示可以直接接需要进行SQL操作的语句
然后创建一个SQLShackDemo数据库,并且插入一些table数据用来测试。(select name from sys.databases;go 可以看到系统内的所有数据库)
1> create database SQLShackDemo;
2> go
1> use SQLShackDemo;
2> go
Changed database context to 'SQLShackDemo'.
1> create table SQLAuthor (id int,name char(20));
2> go
1> insert into SQLAuthor values(1,'Prashanth Jayaram');
2> go
(1 rows affected)
1>
备份数据库
然后,利用以下命令来实现数据库的备份。
BACKUP DATABASE [SQLShackDemo] TO DISK = N'/var/opt/mssql/backup/SQLShackDemo.bak' WITH FORMAT, INIT, COMPRESSION,STATS = 10
然后我们离开容器来测试这个备份文件没有被container容器擦除。通过 docker cp 可以很方便的实现容器内数据和宿主主机的数据的互相传输。
简单的看下 docker cp 命令,主要分为两个参数:
- 容器名,shackdemo1, 紧接冒号后面的就是容器内需要复制的文件路径
- 宿主主机的路径。
例如,docker ps shackdemo1:/var/opt/mssql/backup/SQLShackDemo.bak /tmp/,执行完命令,可以在宿主主机查看一下 ls -l /tmp/SQLShackDemo.bak。
恢复数据库
主要内容为如何在别的SqlServer容器中根据backup文件恢复数据库?
新建一个容器,shackdemo2。
docker run -e ‘ACCEPT_EULA=Y’ -e ‘MSSQL_SA_PASSWORD=SQLShack$2018’ –name shackdemo2 -p 1402:1433 -d microsoft/mssql-server-linux:latest
然后进入新建的容器
docker exec -it shackdemo2 bash
进入指定的命令行
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA Password:
输入如下 select name from sys.databases;go 命令,查询新建的容器现有的系统数据库信息。
退出容器,复制前面备份的文件到容器shackdemo2中。同样的存在如下的两个参数:
- 宿主主机的路径
- 容器名+:+容器内的目录
Docker cp /tmp/SQLShackDemo.bak sqldemo2:var/opt/mssql/data/
接下来,登录shackdemo2容器,并且进入 sqlcmd控制台 之后,运行如下的恢复操作。
RESTORE DATABASE [SQLShackDemo] FROM DISK = N’/var/opt/mssql/data/SQLShackDemo.bak’ with REPLACE
恢复完成之后,可以通过前面的select name from sys.databases;go属性进行查询。
利用Docker里面的数据卷实现数据库的迁移
通常的情况下,可以将数据信息存在一个数据卷容器中,这样,当停止或者销毁SqlServer的容器时候,数据库的存储信息还能够继续的保持。并且能够方便高效的在不同容器件传递数据。
启动一个新的容器,并且挂载创建数据卷sqlservervolume :
docker run -e'ACCEPT_EULA=Y' -e'[email protected]' --name sqldemo –v sqlservervolume:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest
然后,进入容器内部,进行一些数据库的操作。
$ docker exec -it sqldemo bash
# /opt/mssql-tools/bin.sqlcmd -U SA -P [email protected]
1> create database sqlvolumeetestDB;
2>go
创建完之后,离开SQL shell 并且退出。停止和移除sqldemo 容器。
docker stop sqldemo
docker rm sqldemo
在停止和移除 sqldemo 之后,前面新建的数据卷依然存在。
docker volume ls
然后重新,新启动一个容器,并且依旧挂载前面的数据卷。挂载成功之后,你会发现,该容器还是依旧存在。
补充学习的部分
Security
针对数据库的备份,建议将TRUSTWORTHY 设置为OFF。具体详细请参考官网完整设置ALTER DATABASE SET 选项 (Transact-SQL)
ALTER DATABASE database_name SET TRUSTWORTHY OFF
权限
默认情况下,sysadmin、db_owner和db_backoperator等角色需要授予 BACKUP DATABASE和 BACKUP LOG 权限。
如何使用 Transact-SQL
通过执行BACKUP DATABASE 语句创建完整的数据库备份,同时制定
- 要备份的数据库名称
- 写入完整数据库备份的备份设备。
基本语法定义如下:
BACKUP DATABASE database TO backup_device [ , ...n ] [ WITH with_options [ , ...o ] ] ;
假定,希望备份数据库 ‘SQLTestDB’ 中的数据库内容备份到磁盘。
USE SQLTestDB;
GO
BACKUP DATABASE SQLTestDB
TO DISK = 'c:\tmp\SQLTestDB.bak'
WITH FORMAT,
MEDIANAME = 'SQLServerBackups',
NAME = 'Full Backup of SQLTestDB';
GO
参考文档
边栏推荐
- Working with collections
- Network engineers must know the network essence knowledge!
- Unimelb COMP20008 Note 2019 SM1 - Data formats
- CIA security model - use PGP to describe privacy and integrity of network security CIA model
- Istio practical skill: enable accesslog locally
- 股票开户要找谁?在线开户安全么?
- Carry forward the fine style of continuous operation and go all out to ensure the safety of Beijiang Levee
- 中国十大证券app排名 炒股开户安全吗
- Laravel 8 realizes auth login
- 兴业证券靠谱吗?开证券账户安全吗?
猜你喜欢

FreeRTOS新建任务不执行问题解决办法

Stm32f1 and stm32cubeide programming examples -ws2812b full color LED driver (based on spi+dma)

【C语言刷题——Leetcode12道题】带你起飞,飞进垃圾堆

设备通过国标GB28181接入EasyCVR平台,出现断流情况该如何解决?

A brief introduction to the lexical analysis of PostgreSQL

Linux记录-4.22 MySQL5.37安装(补充)

刚刚阿里面软件测试回来,3+1面任职阿里P7,年薪28*15薪
Redis consistency hash and hash slot

A common defect management tool - Zen, which teaches you from installation to using the handle

List of PostgreSQL
随机推荐
Easynvr has been connected to the third-party supervision platform. How to achieve local Internet access
Redis consistency hash and hash slot
Very exciting! 12000 words summarized the theory of network technology, reviewing the old and learning the new
Cvpr2022 𞓜 thin domain adaptation
SF express: please sign for MySQL soul ten
How do individuals open accounts for stock speculation? Is it safe to open accounts for stock speculation
50 practical applications of R language (23) - important concepts of Bayesian Theory: credibility, model models, and parameters
MySQL toolset: the official export tool mysqlpump
Oracle RAC configuration multipathing
[log service CLS] initial experience of Tencent cloud CLS log service
CIA security model - use PGP to describe privacy and integrity of network security CIA model
Laravel 8 realizes auth login
Is it safe to open an account for flush stock on mobile phone!
Tencent cloud native intelligent data Lake Conference will be held, revealing the panoramic matrix of Tencent cloud data Lake products for the first time
Cvpr2022 | domaine compact adaptable
How to efficiently transfer enterprise business data?
Esp32 series -- comparison of esp32 series
安防市场进入万亿时代,安防B2B网上商城系统精准对接深化企业发展路径
PHP export data as excel table
How to generate assembly code using clang in Intel syntax- How to generate assembly code with clang in Intel syntax?