Use mysqldump instead of gitea's xorm for forgejo backup
This commit is contained in:
parent
a1218be960
commit
ead3ac50e9
2 changed files with 20 additions and 11 deletions
|
@ -6,7 +6,7 @@
|
|||
dest: /usr/local/bin/forgejo_backup.sh
|
||||
owner: git
|
||||
group: git
|
||||
mode: 0775
|
||||
mode: 0700
|
||||
|
||||
- name: Create forgejo-dumps directory
|
||||
become: true
|
||||
|
|
|
@ -49,28 +49,37 @@ _EOF
|
|||
do_backup() {
|
||||
echo "Backing up Forgejo..."
|
||||
stop_service
|
||||
output_dump_file="$DUMP_DIR/forgejo-dump-$(date +'%Y%m%d').zip"
|
||||
output_dump_file="$DUMP_DIR/forgejo-dump-$(date +'%Y%m%d').tar"
|
||||
mysql_dump_file="$DUMP_DIR/forgejo-db.sql"
|
||||
cd "$INSTALL_DIR" || exit 1
|
||||
./forgejo dump -V -f "$output_dump_file" -c "$CONFIG_FILE" -t "$TMP_DIR" --skip-attachment-data --skip-lfs-data -w "$WORK_DIR"
|
||||
./forgejo dump -V -f "$output_dump_file" -c "$CONFIG_FILE" -t "$TMP_DIR" --skip-attachment-data --skip-lfs-data -w "$WORK_DIR" --type tar
|
||||
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PW" "$MYSQL_DB" > "$mysql_dump_file"
|
||||
cd "$DUMP_DIR" || exit 1
|
||||
tar --delete -f "$output_dump_file" gitea-db.sql
|
||||
tar --append -f "$output_dump_file" "$(basename $mysql_dump_file)"
|
||||
rm "$mysql_dump_file"
|
||||
chmod 640 "$output_dump_file" # Make the file readable by group for scp to different host by different user
|
||||
gzip "$output_dump_file"
|
||||
restart_service
|
||||
echo "Done."
|
||||
}
|
||||
|
||||
do_restore() {
|
||||
echo "Restoring Forgejo backup..."
|
||||
zip_file="$1"
|
||||
zip_dir="${zip_file%.*}" # Remove file extension
|
||||
chmod 600 "$zip_file" # Backup has changed permissions, restore them here
|
||||
echo "Unzipping $zip_file..." && unzip "$zip_file" -d "$zip_dir" && echo " OK."
|
||||
cd "$zip_dir" || exit 1
|
||||
start_dir="$PWD"
|
||||
tar_file="$1"
|
||||
tar_dir="${tar_file%.tar.gz}" # Remove file extension
|
||||
chmod 600 "$tar_file" # Backup has changed permissions, restore them here
|
||||
echo "Extracting $tar_file..." && mkdir "$tar_dir" && tar xvzf "$tar_file" -C "$tar_dir" && echo " OK."
|
||||
cd "$tar_dir" || exit 1
|
||||
echo -n "Restoring $CONFIG_FILE..." && mv -f app.ini "$CONFIG_FILE" && echo " OK."
|
||||
echo -n "Restoring $DATA_DIR..." && rsync -avz --delete data/ "$DATA_DIR" && rm -rf data && echo " OK."
|
||||
echo -n "Restoring $LOG_DIR..." && rsync -avz log/ "$LOG_DIR" && rm -rf log && echo " OK."
|
||||
echo -n "Restoring $REPO_DIR..." && mkdir -p "$REPO_DIR" && rsync -avz --delete repos/ "$REPO_DIR" && rm -rf repos && echo " OK."
|
||||
echo -n "Changing ownership..." && chown -R git:git "$CONFIG_FILE" "$WORK_DIR" && echo " OK."
|
||||
echo -n "Restoring MySQL database..." && mysql --default-character-set=utf8mb4 -u"$MYSQL_USER" -p"$MYSQL_PW" "$MYSQL_DB" < gitea-db.sql && rm gitea-db.sql && echo " OK."
|
||||
rmdir "$zip_dir"
|
||||
echo -n "Restoring MySQL database..." && mysql --default-character-set=utf8mb4 -u"$MYSQL_USER" -p"$MYSQL_PW" "$MYSQL_DB" < forgejo-db.sql && rm forgejo-db.sql && echo " OK."
|
||||
cd "$start_dir" || exit 1
|
||||
rmdir "$tar_dir"
|
||||
restart_service
|
||||
regenerate_hooks
|
||||
echo "Done."
|
||||
|
@ -78,7 +87,7 @@ do_restore() {
|
|||
|
||||
do_prune() {
|
||||
echo "Pruning Forgejo backups and keeping $1 of them..."
|
||||
dumps=("$DUMP_DIR"/forgejo-dump-*.zip)
|
||||
dumps=("$DUMP_DIR"/forgejo-dump-*.tar.gz)
|
||||
nb_of_dumps="${#dumps[@]}"
|
||||
nb_to_keep="$1"
|
||||
nb_to_prune=$((nb_of_dumps - nb_to_keep))
|
||||
|
|
Loading…
Reference in a new issue