Naposledy aktivní 1740064541

anthony's Avatar anthony revidoval tento gist 1740064541. Přejít na revizi

Žádné změny

anthony's Avatar anthony revidoval tento gist 1740035301. Přejít na revizi

Žádné změny

anthony's Avatar anthony revidoval tento gist 1740033627. Přejít na revizi

1 file changed, 106 insertions

quick-backup.sh(vytvořil soubor)

@@ -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}')"
Novější Starší