Docker构建MySQL环境及备份环境

  一、拉取镜像并运行mysql容器

  Docker 官方公共仓库 Docker Hub :https://hub.docker.com/

  mysql官方镜像:https://hub.docker.com/_/mysql

  从镜像仓库拉取mysql5.7.27镜像

sudo docker pull mysql:5.7.27

  Docker构建MySQL环境及备份环境_第1张图片

sudo docker rmi IMAGE ID  #删除镜像

  运行Mysql容器

sudo docker run --restart=always -p 3306:3306 --name mysql5.7.27 \
-v /longain/mysql/conf:/etc/mysql/conf.d \
-v /longain/mysql/logs:/logs \
-v /longain/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=mysql@pwd -d mysql:5.7.27

  mysql配置文件目录 :/longain/mysql/conf
  mysql日志目录:/longain/mysql/logs
  mysql数据文件目录:/longain/mysql/data

#进入mysql 容器
sudo docker exec -it mysql5.7.27 bash

#使用容器客户端连接mysql:
sudo docker exec -it mysql5.7.27 mysql -uroot -pmysql@pwd

  Docker构建MySQL环境及备份环境_第2张图片

  mysql主配置文件 my.cnf 加载了 /etc/mysql/conf.d 文件夹下所有的配置(后缀必须是 .cnf),我们只需映射 conf.d

  文件夹即可。

  宿主机 /longain/mysql/conf目录下新建配置文件 my.cnf

[client]
#设置字符集为uft-8
default-character-set=utf8
[mysqld]
#数据库默认字符集
character-set-server=utf8
#设置client连接mysql时的字符集,防止乱码
init_connect= SET NAMES utf8
#时区设置 北京时间
default-time-zone = '+8:00'
#server最大接受的数据包大小
max_allowed_packet = 128M
#最大连接数
max_connections = 300

  sudo docker stop CONTAINER ID  #停止容器

  sudo docker start CONTAINER ID  #启动容器

  sudo docker restart CONTAINER ID  #重启容器

  sudo docker rm  CONTAINER ID  #删除容器

  二、构建mysql自动备份容器

  Alpine基础镜像

   Alpine Linux 是一个面向安全的轻型的 Linux 发行版。采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗。在保持瘦身的同时,Alpine Linux 还提供了自己的包管理工具 apk,如:apk add、apk update、apk del。

  关键的是,相比于其他 Linux 的 Docker 镜像,它的容量非常小,仅仅只有5MB。

  Alpine Linux 的官网:

  http://www.alpinelinux.org
  https://pkgs.alpinelinux.org/packages
  apline 镜像地址:https://hub.docker.com/_/alpine

  Dockerfile:

FROM alpine:3.8
RUN apk add --no-cache mysql-client
ENTRYPOINT ["mysql"]

  构建基础镜像:

sudo docker build -t mysql-backup:0.1 .

  默认镜像源可能比较慢,可以使用中科大镜像源:http://mirrors.ustc.edu.cn/alpine/

  需要重新构建 Dockerfile,如:

FROM alpine:3.8
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.8/main > /etc/apk/repositories
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.8/community >> /etc/apk/repositories
RUN apk update && apk upgrade
RUN apk add mysql-client
ENTRYPOINT ["mysql"]

  构建自动备份镜像

  创建脚本 mysqlbak.sh:

#!/bin/bash
#得到当前日期时间
current_time="`date +%Y-%m-%d_%H-%M-%S`"

#判断目录是否存在
if [ ! -d "/data/logs" ]; then
  mkdir -p /data/logs
fi

#备份目录
backupDir="/data/"

#写入操作到日志文件
logfile=/data/logs/mysqlbackup.log

#设置压缩后的文件名
file1=${backupDir}${mysql_db1}-${current_time}'.tar.gz'
file2=${backupDir}${mysql_db2}-${current_time}'.tar.gz'
file3=${backupDir}${mysql_db3}-${current_time}'.tar.gz'

echo "[`date +"%Y-%m-%d %H:%M:%S"`]:开始备份..." >> $logfile
if [ -n "$mysql_db1" ]; then 
mysqldump -h$mysql_host -u$mysql_user -p$mysql_pass $mysql_db1 | gzip > $file1
echo "[`date +"%Y-%m-%d %H:%M:%S"`]:数据库${mysql_db1}备份完成" >> $logfile
fi
if [ -n "$mysql_db2" ]; then 
mysqldump -h$mysql_host -u$mysql_user -p$mysql_pass $mysql_db2 | gzip > $file2
echo "[`date +"%Y-%m-%d %H:%M:%S"`]:数据库${mysql_db2}备份完成" >> $logfile
fi
if [ -n "$mysql_db3" ]; then 
mysqldump -h$mysql_host -u$mysql_user -p$mysql_pass $mysql_db3 | gzip > $file3
echo "[`date +"%Y-%m-%d %H:%M:%S"`]:数据库${mysql_db3}备份完成" >> $logfile
fi

echo "[`date +"%Y-%m-%d %H:%M:%S"`]:开始删除超过7天的备份数据..." >> $logfile
oldDate=`date --date='7 day ago' +%Y-%m-%d`;
echo `rm -rf ${backupDir}${mysql_db1}-${oldDate}*.tar.gz`;
echo `rm -rf ${backupDir}${mysql_db2}-${oldDate}*.tar.gz`;
echo `rm -rf ${backupDir}${mysql_db3}-${oldDate}*.tar.gz`;
echo "[`date +"%Y-%m-%d %H:%M:%S"`]:删除备份数据操作完成 END" >> $logfile

  Dockerfile:

FROM mysql_backup:0.1
COPY ./mysqlbak.sh /
RUN chmod +x mysqlbak.sh
RUN apk add --no-cache tzdata     #设置时区
ENV TZ Asia/Shanghai
ENV cron_conf  "0 30 23 * * ? *"  #每天23点30分触发
RUN echo "$cron_conf /mysqlbak.sh" >> /var/spool/cron/crontabs/root
ENTRYPOINT ["crond","-f"]

  构建镜像:

sudo docker build -t mysql-backup:0.2 .

  启动mysql自动备份容器:

sudo docker run -d --restart=always --name mysql-backup  \
-v /longain/mysql/backup:/data \
-e mysql_user=root \
-e mysql_pass=mysql@pwd \
-e mysql_host=mysql服务器IP \
-e mysql_db1=nsis_hldp \
-e mysql_db2=nsis_hldp_dsc \
-e mysql_db3=nsis_hldp_his \
mysql_backup:0.2

  Docker构建MySQL环境及备份环境_第3张图片

  镜像地址:https://hub.docker.com/r/longain/mysql-backup 

  大功告成!!!

你可能感兴趣的:(LINUX运维专栏,数据库专栏,容器/虚拟化专栏)