add healthcheck and init user script for database
parent
02f20a277c
commit
1d04638be8
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Credentials from environment variables
|
||||||
|
MYSQL_USER="${MARIADB_USER:-default}"
|
||||||
|
MYSQL_PASSWORD="${MARIADB_PASSWORD:-default}"
|
||||||
|
MYSQL_HOST="127.0.0.1"
|
||||||
|
|
||||||
|
ROOT_PASSWORD=$(cat /run/secrets/mariadb_root)
|
||||||
|
|
||||||
|
echo "🔑 READ ROOT PASSWORD FROM SECRETS"
|
||||||
|
|
||||||
|
# Check if MariaDB is running
|
||||||
|
if ! mariadb -h "$MYSQL_HOST" -u root -p"$ROOT_PASSWORD" -e "SELECT 1;" &>/dev/null; then
|
||||||
|
echo "❌ MariaDB is not responding"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if a specific user exists
|
||||||
|
USER_EXISTS=$(mariadb -h "$MYSQL_HOST" -u root -p"$ROOT_PASSWORD" -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '${MYSQL_USER}');" | tail -n 1)
|
||||||
|
|
||||||
|
if [ "$USER_EXISTS" -ne 1 ]; then
|
||||||
|
echo "❌ User '${MYSQL_USER}' does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if the user can log in with the provided password
|
||||||
|
if ! mariadb -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "SELECT 1;" &>/dev/null; then
|
||||||
|
echo "❌ User '${MYSQL_USER}' exists, but authentication failed with the provided password."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ MariaDB is healthy"
|
||||||
|
exit 0
|
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "🔄 Running MariaDB initialization script..."
|
||||||
|
|
||||||
|
# Wait until MariaDB is ready
|
||||||
|
until mysqladmin ping -h localhost --silent; do
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "✅ MariaDB is ready. Checking root credentials..."
|
||||||
|
|
||||||
|
# Try logging in with the root password
|
||||||
|
if ! mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "SELECT 1;" &>/dev/null; then
|
||||||
|
echo "❌ ERROR: Root password in .env does not match the database!"
|
||||||
|
echo "🔄 Attempting to reset the root password..."
|
||||||
|
|
||||||
|
# Stop MariaDB safely
|
||||||
|
echo "⚠️ Stopping MariaDB..."
|
||||||
|
service mysql stop || pkill mysqld
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Start MariaDB in recovery mode
|
||||||
|
echo "🚀 Starting MariaDB in recovery mode..."
|
||||||
|
mysqld_safe --skip-grant-tables --skip-networking &
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Reset root password
|
||||||
|
echo "🔐 Resetting root password..."
|
||||||
|
mysql -u root <<EOSQL
|
||||||
|
ALTER USER 'root'@'localhost' IDENTIFIED BY '${MARIADB_ROOT_PASSWORD}';
|
||||||
|
ALTER USER 'root'@'%' IDENTIFIED BY '${MARIADB_ROOT_PASSWORD}';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
EOSQL
|
||||||
|
|
||||||
|
echo "✅ Root password reset successfully!"
|
||||||
|
|
||||||
|
# Restart MariaDB in normal mode
|
||||||
|
echo "🔄 Restarting MariaDB in production mode..."
|
||||||
|
service mysql stop || pkill mysqld
|
||||||
|
sleep 3
|
||||||
|
mysqld_safe &
|
||||||
|
sleep 5
|
||||||
|
else
|
||||||
|
echo "✅ Root password is correct."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if the database exists
|
||||||
|
DB_EXISTS=$(mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "SHOW DATABASES LIKE '${MARIADB_DATABASE}';" | grep "${MARIADB_DATABASE}" > /dev/null; echo "$?")
|
||||||
|
|
||||||
|
if [ "$DB_EXISTS" -ne 0 ]; then
|
||||||
|
echo "⚠️ Database '${MARIADB_DATABASE}' does not exist. Creating it now..."
|
||||||
|
mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "CREATE DATABASE ${MARIADB_DATABASE};"
|
||||||
|
echo "✅ Database '${MARIADB_DATABASE}' created!"
|
||||||
|
else
|
||||||
|
echo "✅ Database '${MARIADB_DATABASE}' already exists."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure the database user exists and has the correct password
|
||||||
|
USER_EXISTS=$(mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = '${MARIADB_USER}');" | tail -n 1)
|
||||||
|
|
||||||
|
if [ "$USER_EXISTS" -eq 0 ]; then
|
||||||
|
echo "⚠️ User '${MARIADB_USER}' does not exist. Creating it now..."
|
||||||
|
mysql -u root -p"$MARIADB_ROOT_PASSWORD" <<EOSQL
|
||||||
|
CREATE USER '${MARIADB_USER}'@'%' IDENTIFIED BY '${MARIADB_PASSWORD}';
|
||||||
|
GRANT ALL PRIVILEGES ON ${MARIADB_DATABASE}.* TO '${MARIADB_USER}'@'%';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
EOSQL
|
||||||
|
echo "✅ User '${MARIADB_USER}' created and granted access to '${MARIADB_DATABASE}'!"
|
||||||
|
else
|
||||||
|
echo "✅ User '${MARIADB_USER}' already exists. Ensuring correct password."
|
||||||
|
mysql -u root -p"$MARIADB_ROOT_PASSWORD" -e "ALTER USER '${MARIADB_USER}'@'%' IDENTIFIED BY '${MARIADB_PASSWORD}'; FLUSH PRIVILEGES;"
|
||||||
|
echo "✅ Password for '${MARIADB_USER}' updated!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "🎉 MariaDB initialization complete!"
|
Loading…
Reference in New Issue