-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfix_db_connection.sh
More file actions
250 lines (226 loc) · 8.88 KB
/
Copy pathfix_db_connection.sh
File metadata and controls
250 lines (226 loc) · 8.88 KB
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#!/bin/bash
# Script to diagnose and fix database connection issues for bWall
echo "=========================================="
echo "bWall Database Connection Diagnostic Tool"
echo "=========================================="
echo ""
# Load .env file if it exists
if [ -f .env ]; then
echo "[INFO] Loading configuration from .env file..."
export $(grep -v '^#' .env | xargs)
else
echo "[WARNING] .env file not found. Using defaults or environment variables."
fi
DB_HOST="${DB_HOST:-localhost}"
DB_USER="${DB_USER:-iptables_user}"
DB_PASSWORD="${DB_PASSWORD:-}"
DB_NAME="${DB_NAME:-iptables_db}"
DB_ROOT_USER="${DB_ROOT_USER:-root}"
DB_ROOT_PASSWORD="${DB_ROOT_PASSWORD:-}"
echo "Current Configuration:"
echo " Host: $DB_HOST"
echo " User: $DB_USER"
echo " Database: $DB_NAME"
echo " Password: ${DB_PASSWORD:+***SET***}${DB_PASSWORD:-NOT SET}"
echo ""
# Function to test connection
test_connection() {
local user=$1
local password=$2
local database=$3
if [ -z "$password" ]; then
mysql -h "$DB_HOST" -u "$user" -e "SELECT 1" 2>&1
else
mysql -h "$DB_HOST" -u "$user" -p"$password" -e "SELECT 1" 2>&1
fi
}
# Test root connection
echo "[1] Testing root connection..."
if [ -z "$DB_ROOT_PASSWORD" ]; then
echo " Root password not set. Please enter root password when prompted:"
ROOT_TEST=$(mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p -e "SELECT 1" 2>&1)
else
ROOT_TEST=$(mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p"$DB_ROOT_PASSWORD" -e "SELECT 1" 2>&1)
fi
if [ $? -eq 0 ]; then
echo " ✓ Root connection successful"
ROOT_ACCESS=true
else
echo " ✗ Root connection failed: $ROOT_TEST"
ROOT_ACCESS=false
fi
echo ""
# Test user connection
echo "[2] Testing user connection ($DB_USER)..."
if [ -z "$DB_PASSWORD" ]; then
USER_TEST=$(mysql -h "$DB_HOST" -u "$DB_USER" -e "SELECT 1" 2>&1)
else
USER_TEST=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASSWORD" -e "SELECT 1" 2>&1)
fi
if [ $? -eq 0 ]; then
echo " ✓ User connection successful"
USER_ACCESS=true
else
echo " ✗ User connection failed: $USER_TEST"
USER_ACCESS=false
fi
echo ""
# Check if user exists
if [ "$ROOT_ACCESS" = true ]; then
echo "[3] Checking if user exists..."
if [ -z "$DB_ROOT_PASSWORD" ]; then
USER_EXISTS=$(mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p -e "SELECT User, Host FROM mysql.user WHERE User='$DB_USER' AND Host='localhost';" 2>&1)
else
USER_EXISTS=$(mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p"$DB_ROOT_PASSWORD" -e "SELECT User, Host FROM mysql.user WHERE User='$DB_USER' AND Host='localhost';" 2>&1)
fi
if echo "$USER_EXISTS" | grep -q "$DB_USER"; then
echo " ✓ User exists"
else
echo " ✗ User does not exist"
echo ""
echo "[FIX] Would you like to create the user? (y/n)"
read -r CREATE_USER
if [ "$CREATE_USER" = "y" ]; then
if [ -z "$DB_PASSWORD" ]; then
echo " Please enter a password for the new user:"
read -s NEW_PASSWORD
echo " Please confirm the password:"
read -s NEW_PASSWORD_CONFIRM
if [ "$NEW_PASSWORD" != "$NEW_PASSWORD_CONFIRM" ]; then
echo " ✗ Passwords do not match"
exit 1
fi
else
NEW_PASSWORD="$DB_PASSWORD"
fi
if [ -z "$DB_ROOT_PASSWORD" ]; then
mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p <<EOF
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$NEW_PASSWORD';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
else
mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p"$DB_ROOT_PASSWORD" <<EOF
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$NEW_PASSWORD';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
fi
if [ $? -eq 0 ]; then
echo " ✓ User created successfully"
# Update .env if password was set
if [ -f .env ] && [ -n "$NEW_PASSWORD" ]; then
if grep -q "^DB_PASSWORD=" .env; then
sed -i "s/^DB_PASSWORD=.*/DB_PASSWORD=$NEW_PASSWORD/" .env
else
echo "DB_PASSWORD=$NEW_PASSWORD" >> .env
fi
echo " ✓ Updated .env file with new password"
fi
else
echo " ✗ Failed to create user"
fi
fi
fi
echo ""
# Check if database exists
echo "[4] Checking if database exists..."
if [ -z "$DB_ROOT_PASSWORD" ]; then
DB_EXISTS=$(mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p -e "SHOW DATABASES LIKE '$DB_NAME';" 2>&1)
else
DB_EXISTS=$(mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p"$DB_ROOT_PASSWORD" -e "SHOW DATABASES LIKE '$DB_NAME';" 2>&1)
fi
if echo "$DB_EXISTS" | grep -q "$DB_NAME"; then
echo " ✓ Database exists"
else
echo " ✗ Database does not exist"
echo ""
echo "[FIX] Would you like to create the database? (y/n)"
read -r CREATE_DB
if [ "$CREATE_DB" = "y" ]; then
if [ -z "$DB_ROOT_PASSWORD" ]; then
mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;" 2>&1
else
mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p"$DB_ROOT_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;" 2>&1
fi
if [ $? -eq 0 ]; then
echo " ✓ Database created successfully"
echo " [INFO] You may need to run ./quickstart.sh or setup_db.sh to create tables"
else
echo " ✗ Failed to create database"
fi
fi
fi
echo ""
# Check user privileges
if [ "$USER_ACCESS" = false ] && [ "$ROOT_ACCESS" = true ]; then
echo "[5] Attempting to fix user privileges..."
echo " Would you like to reset the user password and grant privileges? (y/n)"
read -r FIX_USER
if [ "$FIX_USER" = "y" ]; then
if [ -z "$DB_PASSWORD" ]; then
echo " Please enter a new password for the user:"
read -s NEW_PASSWORD
echo " Please confirm the password:"
read -s NEW_PASSWORD_CONFIRM
if [ "$NEW_PASSWORD" != "$NEW_PASSWORD_CONFIRM" ]; then
echo " ✗ Passwords do not match"
exit 1
fi
else
NEW_PASSWORD="$DB_PASSWORD"
fi
if [ -z "$DB_ROOT_PASSWORD" ]; then
mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p <<EOF
ALTER USER '$DB_USER'@'localhost' IDENTIFIED BY '$NEW_PASSWORD';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
else
mysql -h "$DB_HOST" -u "$DB_ROOT_USER" -p"$DB_ROOT_PASSWORD" <<EOF
ALTER USER '$DB_USER'@'localhost' IDENTIFIED BY '$NEW_PASSWORD';
GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
fi
if [ $? -eq 0 ]; then
echo " ✓ User privileges updated"
# Update .env if password was changed
if [ -f .env ] && [ -n "$NEW_PASSWORD" ]; then
if grep -q "^DB_PASSWORD=" .env; then
sed -i "s/^DB_PASSWORD=.*/DB_PASSWORD=$NEW_PASSWORD/" .env
else
echo "DB_PASSWORD=$NEW_PASSWORD" >> .env
fi
echo " ✓ Updated .env file with new password"
fi
# Test connection again
echo ""
echo "[6] Testing connection again..."
if [ -z "$NEW_PASSWORD" ]; then
FINAL_TEST=$(mysql -h "$DB_HOST" -u "$DB_USER" -e "SELECT 1" 2>&1)
else
FINAL_TEST=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$NEW_PASSWORD" -e "SELECT 1" 2>&1)
fi
if [ $? -eq 0 ]; then
echo " ✓ Connection successful!"
else
echo " ✗ Connection still failing: $FINAL_TEST"
fi
else
echo " ✗ Failed to update user privileges"
fi
fi
fi
fi
echo ""
echo "=========================================="
echo "Diagnostic complete!"
echo "=========================================="
echo ""
echo "Next steps:"
echo " 1. If connection is working, restart bWall: ./start_bwall.sh"
echo " 2. If issues persist, check the .env file for correct credentials"
echo " Edit .env file: nano .env"
echo " Required variables: DB_HOST, DB_USER, DB_PASSWORD, DB_NAME"
echo ""