本篇是一些Docker结合MySQL常用操作的笔记。这里MySQL版本为5.7。主要是使用Docker搭建MySQL并导入数据、基于alpine镜像构建MySQL客户端、制作MySQL备份专用镜像和使用crontab实现数据库定时备份。
启动MySQL容器、导入数据
拉取官方镜像 docker pull mysql:5.7
启动MySQL -e 设置环境变量 MYSQL_ROOT_PASSWORD 是root的密码docker run --name mysql --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123123 -d mysql:5.7
测试连接 docker exec -it mysql mysql -u root -p123123
或者 docker exec -it mysql mysql -u root -p
实际运行必定要配置文件,根据官网的提示,配置文件在 /etc/mysql/my.cnf,数据目录在 /var/lib/mysql。
本地新建mysql目录,其中新建conf和data目录。conf挂载/etc/mysql/conf.d,data挂载/var/lib/mysql
1 | vim /home/xugz/mysql/conf/conf.cnf |
修改完成后启动,确定放行3306端口
1 | docker run --name mysql --rm -p 3306:3306 \ |
使用 docker logs
查看是否存在报错或者使用客户端进入MySQL确认配置是否生效。
1 | docker exec -it mysql mysql -uroot -p123123 |
利用容器执行命令导入SQL文件
1 | docker cp test.sql mysql:/tmp |
基于alpine构建MySQL客户端
alpine使用的是apk包管理器,命令,如apk add 、apk update 、apk del。默认镜像源可能比较慢,常用的有
中科大镜像源:http://mirrors.ustc.edu.cn/alpine/ 阿里云镜像源:http://mirrors.aliyun.com/alpine/
拉取官方镜像 docker pull alpine
新建目录 mkdir mytool
并在目录中新建Dockerfile文件,键入以下内容。安装MySQL客户端
1 | FROM alpine:latest |
如果不知道当前 alpine的版本,可以通过 docker exec -it 容器名 sh
通过命令行方式进入容器 使用命令 cat /etc/issue
查看。
不使用dockerfile的话,手工配置加速镜像源使用命令docker exec -it tmp sh -c "echo \"http://mirrors.aliyun.com/alpine/v3.10/main/\" > /etc/apk/repositories"
docker exec -it tmp sh -c "echo \"http://mirrors.aliyun.com/alpine/v3.10/community/\" >> /etc/apk/repositories"
当然设置好后,还得 执行apk update && apk upgrade
构建镜像,使用命令编译 docker build -t mytool:1.0 .
使用docker run -it --name tmp mytool:1.0 mysql -h 192.168.2.156 -uroot -p123123
运行验证。
这里的192.168.2.156是MySQL服务端部署主机的IP
制作MySQL备份专用镜像
我们现在想要制作一个MySQL备份数据库数据的镜像,要求存放到指定目录 /home/xugz/mysql/database_bak/下,文件名与数据库名一致。
数据库备份命令mysqldump -u用户名 -p密码 数据库名 > 导出的文件名
。
修改原mytool目录中的Dockerfile文件,覆盖以下内容,注意需要去掉注释哦
1 | FROM mytool:1.0 # 基于上文中alpine构建的MySQL客户端 |
构建镜像,使用命令编译docker build -t mytool:1.1 .
新建备份目录地址 mkdir database_bak
运行并挂载指定目录 docker run -it --name bakup --rm -v /home/xugz/mysql/database_bak:/data mytool:1.1
或者增加环境变量指定,用于跨主机备份,参考以下命令
1 | docker run -it --name bakup --rm -v /home/xugz/mysql/database_bak:/data \ |
运行完成后,可到备份目标地址查看是否存在文件。
crontab定时备份数据表
一般我们先写个脚本文件,塞入计划语句,然后加入到计划任务中。
新建dbback目录,进入新建备份计划脚本文件 vi /bakup.sh
塞入以下内容
1 | #!/bin/sh |
保存文件后,授予脚本可执行权限 chmod +x bakup.sh
。新建Dockerfile文件,添加以下内容,注意需要去掉注释哦
1 | FROM mytool:1.0 |
执行编译 docker build -t mysqlbakup:1.0 .
使用下面命令运行,备份192.168.2.125主机上的db_test_products表
1 | docker run -d --name bakup -v /home/xugz/mysql/database_bak:/data \ |