美文网首页
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