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 JOBDockerfile
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 协议备份到远程机器。