BorgBackup - 备份和恢复文件 Linux教程 数据备份


https://hub.docker.com/r/azlux/borgbackup

https://github.com/azlux/borgbackup-docker

https://hub.docker.com/r/linuxserver/resilio-sync


docker run -d  --name borg   --hostname borg  --restart=always   --privileged=true --user=root  -e TZ='Asia/Shanghai'   --ulimit nofile=262144:262144  -e BORG_PASSPHRASE='wdqdmm@b' -e ONESHOT='true' -e FOLDERS_TO_BACKUP_PATH='/opt/data' -e BACKUP_PATH='/opt/backup' -e MYSQL_HOST='mariadb' -e MYSQL_USER='root' -e MYSQL_PASSWORD='wdqdmm@r' -e POSTGRES_HOST='g.htmltoo.com' -e POSTGRES_USER='root' -e POSTGRES_PASSWORD='wdq2023' -e POSTGRES_VERSION='16'  -v  /data/site/htmltoo.f/htmltoo.backup:/opt/data -v  /data/site/htmltoo.f/htmltoo.borg:/opt/backup  --link mariadb  azlux/borgbackup


docker exec -it borg  /bin/bash


---

If MySQL or Postgres values are given, mysqldump and/or pg_dumpall will be executed and added to the backup.

    MYSQL_USER - MySQL User (with all table read access)

    MYSQL_PASSWORD - MySQL Password

    MYSQL_HOST - IP or name of the MysQL Host

    POSTGRES_USER - POSTGRES User (with all table read access)

    POSTGRES_PASSWORD - POSTGRES Password

    POSTGRES_HOST - IP or name of the POSTGRES Host

    POSTGRES_VERSION - Version of the postgres database if different from bookworm version

    BACKUP_CRON - Custom CRON time (0 3 * * * :every day at 3AM by default)

    ONESHOT - (true/false) Run the backup without cron (usefull if you have eternal scheduler) - False by default


-Debian/Ubuntu 的发行版中安装 borg:

apt install -y borgbackup postgresql-client  mariadb-client -y

-Fedora、RHEL、CentOS、AlmaLinux 和 Rocky Linux 中安装 borg:

yum install -y borgbackup postgresql-client  mariadb-client -y

-Alpine Linux 中安装 borg,请运行以下命令:

apk add borgbackup postgresql-client  mariadb-client 


-

borg --version


----使用, 备份mysql, postgres

borg init --encryption=none  /data/site/htmltoo.f/htmltoo.borg

borg delete /data/site/htmltoo.f/htmltoo.borg

borg list /data/site/htmltoo.f/htmltoo.borg

borg mount  /data/site/htmltoo.f/htmltoo.borg /opt/borg/

borg umount /opt/borg/


mysqldump --all-databases --set-gtid-purged=OFF  --triggers --routines --events   -u'root' -h'127.0.0.1' -p'wdqdmm@r' -P'3396'  | /usr/bin/gzip > /opt/mysql.sql.gz;

borgbackup create --stats --compression lz4 /data/site/htmltoo.f/htmltoo.borg::db_mysql_$(date +%Y-%m-%d_%H:%M) "/opt/mysql.sql.gz"

rm /opt/mysql.sql.gz

borgbackup prune --stats -v --glob-archives='db_mysql_*' --keep-within=7d --keep-weekly=2 --keep-monthly=2  /data/site/htmltoo.f/htmltoo.borg


PGPASSWORD="wdq2023" pg_dumpall -U "root" -h "127.0.0.1" > /opt/pg.sql

borgbackup create --stats --compression lz4 /data/site/htmltoo.f/htmltoo.borg::db_postgres_$(date +%Y-%m-%d_%H:%M) "/opt/pg.sql"

rm /opt/pg.sql

borgbackup prune --stats -v --glob-archives='db_postgres_*' --keep-within=7d --keep-weekly=2 --keep-monthly=2 /data/site/htmltoo.f/htmltoo.borg


script_backup.sh

#!/usr/bin/env bash
echo $(date --iso-8601=seconds) STARTING BACKUP JOB
source /tmp/project_env.sh
if ! ([ -z "$MYSQL_HOST" ] || [ -z "$MYSQL_USER" ] || [ -z "$MYSQL_PASSWORD" ]); then
    echo $(date --iso-8601=seconds) STARTING BACKUP MYSQL
    MYSQL_PWD="$MYSQL_PASSWORD" mysqldump --all-databases --single-transaction -u "$MYSQL_USER" -h "$MYSQL_HOST" > /tmp/all_databases_mysql.sql
    borgbackup create --stats --compression lz4 "$BACKUP_PATH"::db_mysql_$(date +%Y-%m-%d_%H:%M) "/tmp/all_databases_mysql.sql"
    rm /tmp/all_databases_mysql.sql
    echo $(date --iso-8601=seconds) STARTING PRUNE MYSQL
    borgbackup prune --stats -v --glob-archives='db_mysql_*' --keep-within=14d --keep-weekly=8 --keep-monthly=6 "$BACKUP_PATH"
fi
if ! ([ -z "$POSTGRES_HOST" ] || [ -z "$POSTGRES_USER" ] || [ -z "$POSTGRES_PASSWORD" ]); then
    echo $(date --iso-8601=seconds) STARTING BACKUP POSTGRES
    PGPASSWORD="$POSTGRES_PASSWORD" pg_dumpall -U "$POSTGRES_USER" -h "$POSTGRES_HOST" > /tmp/all_databases_pg.out
    borgbackup create --stats --compression lz4 "$BACKUP_PATH"::db_postgres_$(date +%Y-%m-%d_%H:%M) "/tmp/all_databases_pg.out"
    rm /tmp/all_databases_pg.out
    echo $(date --iso-8601=seconds) STARTING PRUNE POSTGRES
    borgbackup prune --stats -v --glob-archives='db_postgres_*' --keep-within=14d --keep-weekly=8 --keep-monthly=6 "$BACKUP_PATH"
fi
for d in $FOLDERS_TO_BACKUP_PATH/*; do
    if [ -d "$d" ]; then
        echo $(date --iso-8601=seconds) STARTING BACKUP FOLDER "$d"
        borgbackup create --stats --compression lz4 "$BACKUP_PATH"::$(echo ${d##*/})_$(date +%Y-%m-%d_%H:%M) "$d"
        echo $(date --iso-8601=seconds) STARTING PRUNE FOLDER "$d"
        borgbackup prune --stats -v --glob-archives="$(echo ${d##*/})_*" --keep-within=14d --keep-weekly=8 --keep-monthly=6 "$BACKUP_PATH"
    fi
done
echo $(date --iso-8601=seconds) END BACKUP JOB

Dockerfile

FROM debian:bookworm-slim
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
    apt install -y -q curl ca-certificates gnupg2 lsb-release && \
    echo "deb [signed-by=/usr/share/keyrings/apt.postgresql.org.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
    curl -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor --yes -o /usr/share/keyrings/apt.postgresql.org.gpg && \
    apt-get update && \
    apt-get install -y borgbackup cron mariadb-client bash procps postgresql-client && \
    rm -rf /var/lib/apt/lists/*
COPY cron_backup /etc/cron.d/backup
COPY script_backup.sh /script_backup.sh
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /script_backup.sh && \
    chmod +x /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
CMD ["cron", "-f"]


----初始化仓库

borg init --encryption=none /home/karthick/borg/backup

borg init --encryption=repokey /home/karthick/borg/backup

borg init --encryption=keyfile /home/karthick/borg/backup

-初始化存储库时,您可以选择加密类型,当您使用加密类型为"None" 时,不会应用任何加密,当您使用“repokey”和“keyfile”作为加密类型时,它使用AES-CTR-256进行加密。


----使用Borg备份文件

-查询您的存储库以查找档案列表以及档案中包含哪些文件。

borg list /home/karthick/borg/backup

-列出了存档"25-11-2021" 中的文件。

borg list /home/karthick/borg/backup::25-11-2021

-使用-e或--exclude标志排除文件和目录。

borg list /home/karthick/borg/backup::25-11-2021 --exclude "hist"

-使用该diff命令来比较两个存档。

-我正在创建一个名为目录datafile.txt下的新文件source,我还创建了一个名为28-11-2021 的档案。

-现在我可以比较新存档和旧存档,如下所示:

borg diff /home/karthick/borg/backup/::27-11-2021 28-11-2021

-将档案"27-11-2021"重命名为"29-11-2021"

borg rename /home/karthick/borg/backup/::27-11-2021 29-11-2021

-将存档解压缩到当前工作目录

borg extract -v --list backup/::25-11-2021

-使用--dry-run标志,它只会显示将要提取的内容而不是提取它。

borg extract --dry-run -v --list backup/::25-11-2021

-通过传递目录名称从存档中提取特定目录,由于我的存档中只有一个目录,因此它将检索该目录。

borg extract -v --list backup/::25-11-2021 home/karthick/borg/source/

-以--exclude在提取目录时添加以省略文件,在这里,我正在提取所有文件,不包括带有hist 的任何文件。

borg extract -v --list backup/::25-11-2021 home/karthick/borg/source/ --exclude "hist"

-挂载整个存储库,请运行以下命令:

mkdir /tmp/borg/

borg mount /home/karthick/borg/backup/ /tmp/borg/

-挂载特定档案

borg mount /home/karthick/borg/backup/::25-11-2021 /tmp/borg/

-卸载已安装的存储库或存档,请使用该borg umount命令。

borg umount /tmp/borg


----修剪档案

---从每周备份中保留2 个副本,那么我的命令将如下所示。

borg prune -v --list --keep-weekly=2 /home/karthick/borg/backup/

---单独应用于某些档案,例如,假设我的存储库中有 10 个存档,并且我希望应用存档 7 的保留规则,然后我可以使用该--prefix标志来设置条件。

borg prune -v --list --keep-weekly=2 --prefix='{archive name}' /home/karthick/borg/backup/


----删除存储库和存档

-要删除单个存档,您必须提供存档名称。

borg delete /home/karthick/borg/backup/::26-11-2021

要删除整个存档,只需提供存储库路径。删除整个目录时,系统会提示您进行确认。

borg delete /home/karthick/borg/backup/


----更改密钥密码

borg key change-passphrase -v /home/karthick/borg/bkup

-还可以使用环境变量设置密码。

BORG_PASSPHRASE="old password" BORG_NEW_PASSPHRASE="new password" borg key change-passphrase /home/karthick/borg/bkup


----导出和导入密钥

-要导出密钥,请运行以下命令:

borg key export bkup/ ./key

cat ./key

-要将密钥导入同一个存储库,请运行以下命令:

borg key import bkup/ ./key


----使用远程仓库

borg init karthick@ostechnix :/home/karthick/borg/bkup

borg mount ssh://karthick@ostechnix:2222/home/karthick/borg/bkup /tmp/borg

borg extract ssh://karthick@ostechnix:2222/home/karthick/borg/bkup


压缩- 可以使用以下压缩方法压缩数据:

LZ4 -> 超快,低压缩。

ZSTD -> 高速低压缩到低速高压缩。

ZLIB -> 中等速度,中等压缩。

LZMA -> 低速,高压缩。

远程备份- 数据可以通过 SSH 协议备份到远程机器。


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回