Ostatnio aktywny 1740064541

anthony's Avatar anthony zrewidował ten Gist 1740064541. Przejdź do rewizji

Brak zmian

anthony's Avatar anthony zrewidował ten Gist 1740035301. Przejdź do rewizji

Brak zmian

anthony's Avatar anthony zrewidował ten Gist 1740033627. Przejdź do rewizji

1 file changed, 106 insertions

quick-backup.sh(stworzono plik)

@@ -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}')"
Nowsze Starsze