Last active 1740064541

anthony's Avatar anthony revised this gist 1740064541. Go to revision

No changes

anthony's Avatar anthony revised this gist 1740035301. Go to revision

No changes

anthony's Avatar anthony revised this gist 1740033627. Go to revision

1 file changed, 106 insertions

quick-backup.sh(file created)

@@ -0,0 +1,106 @@
1 + #!/bin/bash
2 + #####################################################################
3 + # #
4 + # Stupidly simple backup script for own projects #
5 + # #
6 + # Author: Anthony Axenov (Антон Аксенов) #
7 + # Version: 1.0 #
8 + # License: WTFPLv2 More info: https://axenov.dev/?p=1423 #
9 + # #
10 + #####################################################################
11 +
12 + # database credentials ==============================================
13 +
14 + DBUSER=
15 + DBPASS=
16 + DBNAME=
17 + DBCHARSET="utf8"
18 +
19 + # date formats ======================================================
20 +
21 + FMT_DT_DIR="%Y.%m.%d" # 2021.03.19
22 + FMT_DT_FILE="%H.%M" # 08.24
23 + FMT_DT_LOG="%H:%M:%S" # 08:24:15.168149413
24 +
25 + # local storage =====================================================
26 +
27 + LOCAL_BAK_DIR="/backup/$(date +$FMT_DT_DIR)"
28 +
29 + # database backup file
30 + LOCAL_SQL_FILE="$(date +$FMT_DT_FILE)-db.sql.gz"
31 + LOCAL_SQL_PATH="$LOCAL_BAK_DIR/$LOCAL_SQL_FILE"
32 +
33 + # project path and backup file
34 + LOCAL_SRC_DIR="/var/www/"
35 + LOCAL_SRC_FILE="$(date +$FMT_DT_FILE)-src.tar.gz"
36 + LOCAL_SRC_PATH="$LOCAL_BAK_DIR/$LOCAL_SRC_FILE"
37 +
38 + # log file
39 + LOG_FILE="$(date +$FMT_DT_FILE).log"
40 + LOG_PATH="$LOCAL_BAK_DIR/$LOG_FILE"
41 +
42 + log() {
43 + echo -e "[$(date +$FMT_DT_LOG)] $*" | tee -a "$LOG_PATH"
44 + }
45 +
46 + # remote storage ====================================================
47 +
48 + REMOTE_HOST="user@example.com"
49 + REMOTE_BAK_DIR="/backup/$(date +$FMT_DT_DIR)"
50 + REMOTE_SQL_PATH="$REMOTE_BAK_DIR/$LOCAL_SQL_FILE"
51 + REMOTE_SRC_PATH="$REMOTE_BAK_DIR/$LOCAL_SRC_FILE"
52 + REMOTE_LOG_PATH="$REMOTE_BAK_DIR/$LOG_FILE"
53 +
54 + # start =============================================================
55 +
56 + echo
57 + log "Start ----------------------------------------------------------------"
58 + log "Initialized parameters:"
59 + log "\tDB_USER\t\t= $DB_USER"
60 + log "\tDB_NAME\t\t= $DB_NAME"
61 + log "\tDB_CHARSET\t= $DB_CHARSET"
62 + log "\tLOCAL_SRC_DIR\t= $LOCAL_SRC_DIR"
63 + log "\tLOCAL_SRC_PATH\t= $LOCAL_SRC_PATH"
64 + log "\tLOCAL_SQL_PATH\t= $LOCAL_SQL_PATH"
65 + log "\tLOG_PATH\t= $LOG_PATH"
66 + log "\tREMOTE_HOST\t= $REMOTE_HOST"
67 + log "\tREMOTE_SQL_PATH\t= $REMOTE_SQL_PATH"
68 + log "\tREMOTE_SRC_PATH\t= $REMOTE_SRC_PATH"
69 + log "\tREMOTE_LOG_PATH\t= $REMOTE_LOG_PATH"
70 +
71 + mkdir -p $LOCAL_BAK_DIR
72 + log "Created local dir: $LOCAL_BAK_DIR"
73 +
74 + ssh $REMOTE_HOST mkdir -p $REMOTE_BAK_DIR
75 + log "Created remote dir: $REMOTE_BAK_DIR"
76 +
77 + log "1/4 Dumping DB: $DBNAME..."
78 + mysqldump \
79 + --user="$DBUSER" \
80 + --password="$DBPASS" \
81 + --default-character-set="$DBCHARSET" \
82 + --opt \
83 + --quick \
84 + "$DBNAME" | gzip > "$LOCAL_SQL_PATH"
85 + # --opt Same as --add-drop-table, --add-locks, --create-options,
86 + # --quick, --extended-insert, --lock-tables, --set-charset,
87 + # and --disable-keys
88 + [ $? -gt 0 ] && log "ERROR: failed to create dump. Exit-code: $?" || log "\t- OK"
89 +
90 + log "2/4 Sending database backup to $REMOTE_HOST..."
91 + rsync --progress "$LOCAL_SQL_PATH" "$REMOTE_HOST:$REMOTE_SQL_PATH"
92 + [ $? -gt 0 ] && log "ERROR: failed to send database backup. Exit-code: $?" || log "\t- OK"
93 +
94 + log "3/4 Compressing project dir: $LOCAL_SRC_DIR..."
95 + tar -zcf "$LOCAL_SRC_PATH" "$LOCAL_SRC_DIR"
96 + [ $? -gt 0 ] && log "ERROR: failed to compress project. Exit-code: $?" || log "\t- OK"
97 +
98 + log "4/4 Sending project backup to ${REMOTE_HOST}..."
99 + rsync --progress "$LOCAL_SRC_PATH" "$REMOTE_HOST:$REMOTE_SRC_PATH"
100 + [ $? -gt 0 ] && log "ERROR: failed to send project backup. Exit-code: $?" || log "\t- OK"
101 +
102 + rsync --progress "$LOG_PATH" "$REMOTE_HOST:$REMOTE_LOG_PATH"
103 +
104 + log "Finish!"
105 + log "Used space: $(du -h "$LOCAL_BAK_DIR" | tail -n1)"
106 + log "Free space: $(df -h | tail -n1 | awk '{print $4}')"
Newer Older