Docker搭建MySQL还原环境
最近在某个涉及MySQL的案件研判中,客户发过来一个SQL文件,要求尽快寻找数据库内与案情有关的数据。想到这种情况时有发生,看完数据后客户还有可能不想做了,每次搭建环境费时费力不说,这些数据的清理又很麻烦。便想要搭建一个专用于MySQL的还原环境。那么怎么能够实现即开即用、轻量化的同时又满足研判的需求呢?第一个想到的技术就是Docker。
环境搭建过程
基础环境准备
环境:笔者在Windows 10电脑的VMware里安装的CentOS 7.6系统。
docker-ce
详细的安装步骤不在赘述。以下是笔者使用的docker-ce版本。一定要配置好镜像加速器,在还原过程中拉取镜像会节省很多时间。
docker-compose
详细的安装步骤不再赘述,下图是笔者使用的docker-compose相关配置。
配置文件编写
笔者在/home目录下创建/base/的目录。使用vim工具依次创建并编辑下列文件,具体内容如下:
start.sh
该脚本的主要作用是控制整个还原的流程,脚本首先会使用sed命令将已经做成变量的可变字段替换“Dockerfile”、“docker-compose.yml”、“init.sh”对应内容。修改完成后,首先根据“Dockerfile”构建镜像,同时将当前下的SQL文件和“init.sh”脚本复制到镜像内。镜像构建完成后,根据“docker-compose.yml”的内容启动镜像,最后使用“docker exec”命令运行容器内的“init.sh”脚本。“init.sh”的内容主要是将SQL文件还原到数据库并查询基础信息。
命令的具体作用请看下图注释:
init.sh
该脚本会随着镜像的创建复制到镜像内。主要作用是将容器内的event.sql文件还原到数据库。init.sh内容如下图所示:
Dockerfile
Dockerfile是一个文本文件,在其中定义要执行的命令,使用docker build
命令可创建镜像,创建过程中按照Dockerfile所定义的内容打开临时性容器(使用docker commit进行提交),就能得到容器应用镜像。最终把构建的容器提交到本地仓库。该文件定义了构建的镜像的来源,以及创建镜像时要进行的复制操作。Dockerfile内容如下图所示:
docker-compose.yml
Compose 是用于定义和运行多容器 Docker 应用程序的工具。在 docker-compose.yml 文件来配置应用程序需要的服务。使用容器编排命令,就可以从docker-compose.yml 文件配置中创建并启动服务。docker-compose.yml内容如下图所示:
上述配置文件内容设置完成后,给脚本init.sh和start.sh提升至可执行权限。
至此,还原环境搭建完成。
使用方法
信息收集
笔者本次要还原的的SQL文件为“event.sql”,下面是文件部分内容:
确认以下信息:
- MySQL版本(SQL文件获取):5.7
- 数据库名称(SQL文件获取):event
- 端口号(SQL文件获取):3306
- SQL文件名:很明显是event
- 容器数据卷(把容器内的MySQL数据挂载到容器外):笔者选择/home/test/mysql-event-data/
- MySQL的root密码:笔者选择root
- 镜像名(构建的镜像名称):笔者选择mysql-event
- 容器名(启动容器的名称):笔者选择mysql-event01
修改并执行脚本
每次使用可直接复制一份/base/文件夹,此次测试复制并重命名为/event/,根据信息收集步骤获取的信息修改“start.sh”文件。
运行start.sh
在Windows主机连接MySQL数据库进行验证(保证windows和Centos 7.6互通)
拓展
如果是其他数据库版本出现命令互相不兼容的问题要如何处理?
优化start.sh提升智能化?