美文网首页
shell定时备份docker容器的mysql数据库

shell定时备份docker容器的mysql数据库

作者: bullion | 来源:发表于2018-09-07 17:01 被阅读0次

1)设置Docker Mysql的volumes

mariadb:

    container_name: mariadb

    image: mariadb

    environment:

      - MYSQL_ROOT_PASSWORD=dbpassword

      - MYSQL_DATABASE=dbback

      - MYSQL_USER=dbuser

      - MYSQL_PASSWORD=dbpassword

      - "TZ=Asia/Shanghai"

    volumes:

      - /home/xldev/docker/mysqldata:/var/lib/mysql

      - /home/xldev/docker/config:/etc/mysql/conf.d

    ports:

      - 3306:3306


2)编写备份脚本

#!/bin/bash

:<

此为参考shell示例代码

根据每个服务器配置的不同进行相应的修改

赋值权限:

    Step-One :修改所有BACKUP用户权限 sudo chown -R [用户] back

    Step-Two :修改所有BACKUP组权限 sudo chgrp -R [用户组] back

    Step-Three :赋予脚本执行权限 sudo chmod 744 [脚本]

添加定时任务:

    Step-One :查看定时任务 crontab -l

    Step-Two :删除定时任务 crontab -r

    Step-Three :

        crontab -e

        #每天凌晨两点十分执行脚本 /data/tmp/mysqldata/backup/kstreamdb.sh

        10 2 * * * /data/tmp/mysqldata/backup/kstreamdb.sh

        Step-Four :重启定时任务 service crond restart

!

#当前的时间作为备份的文件名

DATETIME=$(date +%Y_%m_%d_%H%M%S)

#服务器存放路径

BACKUP=/data/tmp/mysqldata/backup

#docker容器备份存放路径

DOCKER_BACKUP=/var/lib/mysql/backup

#docker容器名称

DOCKER_NAME=mariadb

#docker数据库用户名

DOCKER_DB_USER=dbuser

#docker数据库密码

DOCKER_DB_PWD=dbpassword

#docker数据库名

DOCKER_DATABASE=dbback

echo "=======开始备份========"

echo "=======备份的路径是 $BACKUP/$DATETIME.tar.gz"

#进入 docker mariadb镜像

docker exec -i mariadb bash <<-DOF

        #如果备份的路径文件夹存在,就使用,否则就创建

        [ ! -d "$DOCKER_BACKUP/$DATETIME" ] && mkdir -p "$DOCKER_BACKUP/$DATETIME"

        #执行mysql的备份数据库的指令

        mysqldump -u${DOCKER_DB_USER} -p${DOCKER_DB_PWD}  $DOCKER_DATABASE | gzip > $DOCKER_BACKUP/$DATETIME/$DATETIME.sql.gz

        #打包备份文件

        cd $DOCKER_BACKUP

        tar -zcvf $DATETIME.tar.gz $DATETIME

        #删除临时目录

        rm -rf $DOCKER_BACKUP/$DATETIME

        #删除10天前的备份文件

        find $DOCKER_BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;

        #进入数据库

        mysql -u${DOCKER_DB_USER} -p${DOCKER_DB_PWD} <<-MOF

                #指定数据库

                use ${DOCKER_DATABASE};

                #开启事务

                BEGIN;

                    #清理 history_record表30天前的数据

                    DELETE FROM history_record  WHERE create_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MONTH));

                    #释放表空间(会锁定表)

                    OPTIMIZE TABLE history_record;

                #提交事务

                COMMIT;

exit

MOF

exit

DOF

echo "=======备份文件成功========"

相关文章

网友评论

      本文标题:shell定时备份docker容器的mysql数据库

      本文链接:https://www.haomeiwen.com/subject/hsgcgftx.html