Mac系统Docker中SQLserver数据库文件恢复记录
Mac想要安装SQLsever,通过docker去拉去镜像是最简单方法。
一、下载Docker
- Docker 下载安装:
需要‘科学上网’ 才能访问到docker官网。( https://docs.docker.com/desktop/install/mac-install/)。
这里需要安装包的留言我将网盘中的docker安装包分享出来!
根据电脑搭载的芯片架构,选择苹果芯片<font style="color:rgb(199, 37, 78);background-color:rgb(249, 242, 244);">Apple Silicon</font>
或因特尔芯片<font style="color:rgb(199, 37, 78);background-color:rgb(249, 242, 244);">Intel chip</font>
的安装包下载。
安装过程省略…
- 配置Docker镜像加速
国内镜像地址:
阿里云 Docker 镜像加速,需在阿里云官方网站注册账号后获取。
腾讯云 Docker 镜像加速
华为云 Docker 镜像加速
清华大学 TUNA 协会 镜像源地址:https://docker.mirrors.tuna.tsinghua.edu.cn
中国科学技术大学 镜像源地址:https://docker.mirrors.ustc.edu.cn
北京理工大学 镜像源地址:https://dockerhub.azk8s.cn
浙江大学 镜像源地址:https://mirrors.zju.edu.cn/dockerhub/
修改 Docker 配置文件:
修改配置文件:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
- Docker容器设置:
根据实际需求情况,设置Docker容器的相关配置信息!
- 验证 Docker :
打开命令行窗口,运行命令docker --version
二、拉取SQLserver镜像
在ARM框架的m1,m2中,在使用镜像拉取SQLsever的时候,以前的 **mcr.microsoft.com/mssql/server:2019-latest **是行不通的,只会拉取到AMD64版本,指定arm64版本拉下来的也还是AMD64。所以我们改用** mcr.microsoft.com/azure-sql-edge:latest **镜像。
docker pull **mcr.microsoft.com/azure-sql-edge:latest**
拉取下来后的镜像 可以在 images 中查看:
三、生成容器
docker run 命令运行sqlserver镜像,生成容器! docker run -e "ACCEPT_EULA=1" -e "MSSQL_SA_PASSWORD=**Sxf123456@**" -e "MSSQL_PID=Developer" -e "MSSQL_USER=SA" -p 1433:1433 -d --name=sql mcr.microsoft.com/azure-sql-edge
上面黑体加粗的密码部分换成你自己的:
- 需要注意密码设置是有规则的
- 检查Docker进程
在命令行中,使用 docker ps
查看当前 Docker 中运行的进程:
四、Docker中导入数据库文件
4.1 启动交互式 Bash Shell
docker容器运行之后,在命令行界面使用下面命令在容器内部启动交互式 Bash Shell:docker exec -it [你的容器名称] "bash"
**注意1: **这里也可以不用在命令行窗口进行,可以直接在Docker应用中进行交互:
**注意2: **查看容器是否已经创建数据卷 ,通过
docker volume ls
命令查看:docker 中查看 数据卷:
如果没有创建数据卷,则需要创建好数据卷, 使用命令:
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
下面的操作,我以交互式 Bash Shell 进行操作!
4.2 向Docker中导入数据文件
在带有数据卷的容器中创建个文件夹把我们的** .MDF和.LDF文件** 复制过去- 中Docker中创建一个文件夹,存放数据库数据文件:
进入Docker容器中后(命令行界面启动交互式Bash Shell),通过命令 mkdir /xx/xx
来创建文件夹:
如过我们没有使用 交互式 Bash Shell 时,在命令行界面 可以使用以下命令实现在Docker中创建文件夹:docker exec -it [sql你的容器名称] mkdir /var/opt/mssql/data
- 将.MDF和.LDF文件 复制到Docker中创建好的文件夹中
使用如下命令,将需要复制的文件复制到Docker容器中的对应文件夹中:
docker cp /Users/chiyu/Desktop/xx.LDF [sql(你的容器名称)]:/var/opt/mssql/mtxyBackups/xx.LDF
docker cp /Users/chiyu/Desktop/xx.MDF [sql(你的容器名称)]:/var/opt/mssql/mtxyBackups/xx.MDF
**注意:**需要注意被复制文件的文件权限需要调整!
可以在复制进入docker 之前先将文件的权限进行调整后,在进行复制:**
**(显示简介–> 共享权限 --> everyone 读与写)
也可以将文件复制进入Docker之后,在使用命令将数据文件的权限进行修改:
chmod 666 xx.LDF
chown -R root:root xx.LDF
五、使用Navicat Premium导入文件数据
- 通过Navicat Premium 连接Sqlserver,然后创建数据库
(自行下载安装Navicat )
Navicat 连接sqlserver创建数据库时,需要注意排序规则设置为:Chinese_PRC_90_CI_AS**** 。 否则会出现插入中文字符时会出现问号或者乱码的情况!
- 双击数据库打开(变绿色),然后点击左上方的新建查询,输入下面代码(dbname无所谓):
Navicat中执行下面命令:
EXEC sp_attach_db @dbname = 'database_name',
@filename1 = '/home/Xk_Log.LDF',
@filename2 = '/home/Xk.MDF'
我这里是 采用另一种方式: 导入数据库的 .bat 文件到Docker中,在通过 Microsoft SQL Server Tools 连接Docker中的 SQLserver ,然后通过.bat文件进行数据库还原操作!