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

  

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

  

  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

  

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

  大功告成!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章