117.info
人生若只如初见

Docker在CentOS上如何备份

在CentOS系统上使用Docker备份容器数据主要包括两种类型:备份正在运行的容器数据和备份Docker镜像。以下是具体的备份方法:

备份正在运行的容器数据

  1. 创建备份目录

    在服务器上创建一个目录,用于存放备份文件。例如:

    mkdir -p /home/docker/mysql/data_back && chmod -R 777 /home/docker/mysql/data_back
    
  2. 查看docker下mysqld容器

    使用以下命令查看名为 mysql 的容器:

    docker ps -aqf "name=mysql"
    
  3. 创建备份脚本

    /home/docker/mysql/data_back 中创建 backup.sh 文件,并添加以下内容:

    #!/bin/bash
    # 获取容器ID
    container_id=$(docker ps -aqf "name=mysql")
    echo "mysql的容器ID is $container_id"
    
    # 检查容器是否存在
    if [ -z "$container_id" ]; then
        echo "没有找到名为 mysql 的容器!"
        exit 1
    fi
    
    # 登录用户名和密码(请自行填入)
    MYSQL_USER="root"
    MYSQL_PASSWORD="123456"
    MYSQL_PORT="3306"
    
    # 是否删除过期数据
    expire_backup_delete="true"
    expire_days=7
    
    # 备份文件存放地址
    backup_location="/home/docker/mysql/data_back"
    
    # 定义备份详细时间
    backup_time=$(date +%Y%m%d%H%M)
    
    # 定义备份目录中的年月日时间
    backup_Ymd=$(date +%Y-%m-%d)
    
    # 备份文件夹全路径
    backup_dir=$backup_location/$backup_Ymd
    
    # 获取所有数据库的名称,排除信息库DATABASES=$(docker exec $container_id mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'SHOW DATABASES;' | grep -vE '^(Database|information_schema|performance_schema)$')
    echo "DATABASES == $DATABASES"
    
    # 判断是否有待备份的数据库
    if [ -n "$DATABASES" ]; then
        mkdir -p "$backup_dir"
    
        # 循环备份每个数据库
        echo "$DATABASES" | while read dbname; do
            echo "开始执行数据库 $dbname 备份..."
    
            # 备份数据库,备份为压缩包形式
            docker exec $container_id mysqldump --defaults-extra-file=/etc/mysql/conf.d -F -B --default-character-set=utf8 "$dbname" | gzip > "$backup_dir/bak-$dbname-$backup_time.sql.gz"
    
            if [ $? -eq 0 ]; then
                echo "数据库 $dbname 成功备份到 $backup_dir/bak-$dbname-$backup_time.sql.gz"
            else
                echo "数据库 $dbname 备份失败!"
            fi
        done
    
        # 删除过期备份
        if [ "$expire_backup_delete" == "true" ] && [ -n "$backup_dir" ]; then
            find "$backup_dir" -type f -mtime +$expire_days -exec rm -f {} \;
            echo "删除过期的数据库备份信息!"
        fi
    else
        echo "没有待备份的数据库,停止数据库备份"
        exit 1
    fi
    
    echo "所有的数据库已完成备份"
    exit 0
    
  4. 编辑配置

    编辑 MySQL 的 my.cnf 文件,例如:

    [client]
    user=root
    password=123456
    
    [mysqld]
    default-authentication-plugin=mysql_native_password
    
    [mysql]
    user=root
    password=123456
    
    [mysqldump]
    user=root
    password=123456
    
  5. 赋予可执行权限

    设置脚本拥有者可读写:

    chmod +x /home/docker/mysql/data_back/backup.sh
    
  6. 建立cron定时计划

    使用 crontab -e 添加定时任务,例如每天凌晨2点执行备份脚本:

    0 2 * * * /home/docker/mysql/data_back/backup.sh
    

备份Docker镜像

  1. 使用 docker save 命令

    使用以下命令备份镜像为tar包:

    docker save -o mycentos.tar mycentos_new:1.1
    

    执行后,运行 ls 命令即可看到打包成的tar包。

通过上述步骤,你可以在CentOS系统上使用Docker备份正在运行的容器数据和Docker镜像。请根据实际需求调整备份脚本和定时任务。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe158AzsNAAZWDVU.html

推荐文章

  • centos k8s更新升级流程

    在CentOS上更新和升级Kubernetes(k8s)集群的流程通常涉及以下步骤。以下是一个基本的指南,基于从旧版本升级到较新版本的一般过程:
    准备工作 备份数据:...

  • CentOS Node.js如何配置数据库连接

    在CentOS上配置Node.js应用程序以连接到数据库,通常涉及以下几个步骤: 安装Node.js:
    如果你还没有安装Node.js,可以使用以下命令安装:
    sudo yum i...

  • centos appimage启动速度快吗

    AppImage 格式的应用程序具有较快的启动速度,因为它将应用程序及其所有依赖项打包成一个独立的可执行文件,用户无需安装或管理员权限即可直接运行该程序。此外,...

  • 怎样在centos上搭建k8s环境

    在CentOS上搭建Kubernetes(k8s)环境可以通过多种方式实现,包括使用kubeadm进行初始化配置,或者手动安装各个组件。以下是使用kubeadm在CentOS 7.9上部署单机K...

  • centos反汇编指令的安全性如何保障

    在CentOS系统中,确保反汇编指令的安全性至关重要。以下是一些建议来保障反汇编指令的安全性: 权限管理: 仅授权给需要访问和使用反汇编工具的用户或用户组。

  • SFTP怎样实现断点续传

    SFTP(SSH File Transfer Protocol)本身并不直接支持断点续传功能,但你可以通过一些方法来实现这一功能。以下是几种常见的方法:
    方法一:使用lftp
    ...

  • ubuntu上jellyfin资源占用多少

    Jellyfin在Ubuntu上的资源占用情况会因具体配置和使用场景而有所不同。以下是根据搜索结果整理的相关信息:
    Jellyfin在Ubuntu上的资源占用情况 CPU和内存占...

  • centos extract如何提高性能

    “CentOS extract”可能是一个误解或输入错误,因为“extract”通常指的是从压缩文件中提取内容,而不是一个特定的CentOS操作或命令。如果你指的是在CentOS系统中...