Última actividad 1740064541

anthony's Avatar anthony revisó este gist 1740064541. Ir a la revisión

Sin cambios

anthony's Avatar anthony revisó este gist 1740035301. Ir a la revisión

Sin cambios

anthony's Avatar anthony revisó este gist 1740033627. Ir a la revisión

1 file changed, 106 insertions

quick-backup.sh(archivo creado)

@@ -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}')"
Siguiente Anterior