-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackup.sh
149 lines (129 loc) · 4.06 KB
/
backup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/bash
# Clean and update system
sudo apt update -y
sudo apt upgrade -y
clear
# Install required packages
echo "Installing unzip and rsync..."
sudo apt install unzip rsync -y
sleep 5
clear
# Define working directory
work_dir="/root/importer"
sql_backup_dir="$work_dir/sql-backups"
# Create working directory
mkdir -p "$work_dir"
mkdir -p "$sql_backup_dir"
# Ask user for backup action
while true; do
echo "Choose an option:"
echo "1) Enable backup"
echo "2) Import backup"
read -r choice
if [[ "$choice" == "1" ]]; then
echo "Enabling backup using AC-Lover..."
sleep 5
bash <(curl -Ls https://github.com/AC-Lover/backup/raw/main/backup.sh)
exit 0
elif [[ "$choice" == "2" ]]; then
echo "Proceeding with backup import..."
break
else
echo "Invalid input! Please enter 1 or 2."
fi
done
# Step 1: Check for default backup path or ask for one
default_backup="/root/ac-backup-m.zip"
if [ -f "$default_backup" ]; then
echo "Default backup found at $default_backup. Using it."
zip_path="$default_backup"
else
echo "Please enter the path to the backup file:"
read -r zip_path
if [ ! -f "$zip_path" ]; then
echo "Backup file not found at the specified path! Exiting..."
exit 1
fi
fi
# Step 2: Extract the zip file
echo "Extracting the zip file..."
unzip "$zip_path" -d "$work_dir"
if [ $? -ne 0 ]; then
echo "Failed to extract the zip file! Exiting..."
exit 1
fi
# Step 3: Check MySQL status in extracted docker-compose.yml
compose_file="$work_dir/opt/marzban/docker-compose.yml"
if [ ! -f "$compose_file" ]; then
echo "docker-compose.yml not found in extracted files! Exiting..."
exit 1
fi
if grep -q "mysql:" "$compose_file"; then
echo "MySQL is enabled in docker-compose.yml"
mysql_enabled=true
else
echo "MySQL is not enabled in docker-compose.yml"
mysql_enabled=false
fi
# Step 4: Handle MySQL and folder transfers
if [ "$mysql_enabled" == true ] && [ -d "$work_dir/var/lib/marzban/mysql" ]; then
echo "MySQL folder found in backup. Saving SQL backups..."
mv "$work_dir/var/lib/marzban/mysql/db-backup/"*.sql "$sql_backup_dir/" 2>/dev/null
if [ $? -ne 0 ]; then
echo "No SQL backups found!"
fi
echo "Removing /var/lib/marzban/mysql folder..."
rm -rf "$work_dir/var/lib/marzban/mysql"
fi
# Transfer other files regardless of MySQL status
echo "Moving files to /var/lib/marzban..."
rsync -av "$work_dir/var/lib/marzban/" /var/lib/marzban/
echo "Moving files to /opt/marzban..."
rsync -av "$work_dir/opt/marzban/" /opt/marzban/
# Step 5: Run Marzban update
echo "Running Marzban update..."
if command -v marzban >/dev/null 2>&1; then
marzban update
if [ $? -ne 0 ]; then
echo "Marzban update failed!"
exit 1
fi
else
echo "Marzban not found! Exiting..."
exit 1
fi
# Step 6: Import SQL files if MySQL is enabled
if [ "$mysql_enabled" == true ] && [ -d "$sql_backup_dir" ]; then
env_file="/opt/marzban/.env"
if [ ! -f "$env_file" ]; then
echo ".env not found! Exiting..."
exit 1
fi
db_password=$(grep -oP '(?<=MYSQL_ROOT_PASSWORD=).*' "$env_file" | tr -d ' ')
if [ -z "$db_password" ]; then
echo "MySQL root password not found in .env! Exiting..."
exit 1
fi
sleep 10
echo "Importing SQL files into MySQL..."
for sql_file in "$sql_backup_dir"/*.sql; do
if [ -f "$sql_file" ]; then
echo "Importing $sql_file into MySQL..."
cat "$sql_file" | docker exec -i marzban-mysql-1 bash -c "mysql --socket=/var/run/mysqld/mysqld.sock -u root -p'$db_password' marzban"
if [ $? -ne 0 ]; then
echo "Failed to import $sql_file!"
else
echo "$sql_file imported successfully!"
fi
fi
done
else
echo "MySQL is not enabled or no SQL backups found. Skipping SQL import."
fi
# Step 7: Clean up temporary files
echo "Cleaning up temporary files..."
rm -rf "$work_dir"
# Step 8: Restart Marzban
echo "Restarting Marzban..."
marzban restart
echo "Done!"