Use mysqldump instead of gitea's xorm for forgejo backup

This commit is contained in:
flyingscorpio@clevo 2023-01-18 14:20:13 +01:00
parent a1218be960
commit ead3ac50e9
2 changed files with 20 additions and 11 deletions

View file

@ -6,7 +6,7 @@
dest: /usr/local/bin/forgejo_backup.sh dest: /usr/local/bin/forgejo_backup.sh
owner: git owner: git
group: git group: git
mode: 0775 mode: 0700
- name: Create forgejo-dumps directory - name: Create forgejo-dumps directory
become: true become: true

View file

@ -49,28 +49,37 @@ _EOF
do_backup() { do_backup() {
echo "Backing up Forgejo..." echo "Backing up Forgejo..."
stop_service 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 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 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 restart_service
echo "Done." echo "Done."
} }
do_restore() { do_restore() {
echo "Restoring Forgejo backup..." echo "Restoring Forgejo backup..."
zip_file="$1" start_dir="$PWD"
zip_dir="${zip_file%.*}" # Remove file extension tar_file="$1"
chmod 600 "$zip_file" # Backup has changed permissions, restore them here tar_dir="${tar_file%.tar.gz}" # Remove file extension
echo "Unzipping $zip_file..." && unzip "$zip_file" -d "$zip_dir" && echo " OK." chmod 600 "$tar_file" # Backup has changed permissions, restore them here
cd "$zip_dir" || exit 1 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 $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 $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 $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 "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 "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." 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."
rmdir "$zip_dir" cd "$start_dir" || exit 1
rmdir "$tar_dir"
restart_service restart_service
regenerate_hooks regenerate_hooks
echo "Done." echo "Done."
@ -78,7 +87,7 @@ do_restore() {
do_prune() { do_prune() {
echo "Pruning Forgejo backups and keeping $1 of them..." 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_of_dumps="${#dumps[@]}"
nb_to_keep="$1" nb_to_keep="$1"
nb_to_prune=$((nb_of_dumps - nb_to_keep)) nb_to_prune=$((nb_of_dumps - nb_to_keep))