#!/bin/bash

#Variables d'environnement
DATADIR="/var/lib/mysql"             #Emplacement base de données
TARGET="/home/utilisateur/backups"   #Emplacement de la sauvegarde
UserSavePreload=""                   #Pour forcer le nom utilisateur à utiliser pour faire les sauvegardes
UserSavePassPreload=""               #Pour forcer le mot de passe de l'utilisateur




echo
echo "Script de sauvegarde base de données mariadb avec MariaBackup"
echo


# Vérification mariadb-backup est installé.
MariaBackupVersion=$(command mariabackup -v 2>&1 | grep -E '[0-9]+\.[0-9]')

if [ -z "$MariaBackupVersion" ]; then
  echo "ERREUR: mariadb-backup non installé"
  echo
  exit 1
fi


# Extraction des versions
BACKUP_VER=$($mariabackup --version 2>&1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
MARIADB_VER=$(mariadb --version 2>&1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)


# Comparaison des versions
if [ "$BACKUP_VER" = "$MARIADB_VER" ]; then
  echo "OK Versions identiques"
  echo
  exit 0
else
  echo "Attention versions différentes, veuillez installer la version adapté"
  echo
  exit 0
fi


function SaveDB {
read -p "Utilisateur ? " UserSave
read -p "Mot de passe ? " UserSavePass
UserSave=$UserSavePreload
UserSavePass=$UserSavePassPreload
echo
mariabackup --backup --parallel=2 --datadir=$DATADIR --target-dir=$TARGET/full-$(date +%Y%m%d) --user='$UserSave' --password='$UserSavePass'
echo
}


# Fonction creation utilisateur MariaDB
function UserCreate {
read -p "Nouveau nom d'utilisateur MariaDB ? " UserCreateName

if [ -z "$UserCreateName" ]; then
  echo "❌ Erreur: Le nom d'utilisateur ne peut pas être vide"
  exit 1
fi
  
read -sp "Mot de passe ? " UserCreatePassword
read -sp "Confirmer mot de passe ? " UserCreatePasswordRepeat
    
if [ -z "$UserCreatePassword" ]; then
  echo "❌ Le mot de passe ne peut pas être vide"
  exit 1
fi

if [ "$UserCreatePassword" != "$UserCreatePasswordRepeat" ]; then
  echo "❌ Les mots de passe ne correspondent pas"
  exit 1
fi
  
echo "🔐 Connexion à MariaDB..."
  
mariadb -u root -p <<EOF
CREATE USER IF NOT EXISTS '$UserCreateName'@'localhost' IDENTIFIED BY '$UserCreatePassword';
GRANT RELOAD, PROCESS, LOCK TABLES, BINLOG MONITOR ON *.* TO '$UserCreateName'@'localhost';
FLUSH PRIVILEGES;
EOF

if [ $? -eq 0 ]; then
  echo
  echo "✅ Utilisateur créé avec succès !"
  echo
  echo "📋 Récapitulatif :"
  echo "   Utilisateur: '$UserCreateName'@localhost"
  echo "   Droits: RELOAD, PROCESS, LOCK TABLES, BINLOG MONITOR"
else
  echo
  echo "❌ Erreur lors de la création de l'utilisateur"
  echo
  exit 1
fi
}


function UserList {
echo
echo "Liste des utilisateurs de la base de données"
echo "MariaDB root authentification"
mariadb -u root -p -e "SELECT User, Host FROM mysql.user"
echo
}


# Menu principal
while true; do
echo
echo -e "1 - Sauvegarder une base de données"
echo -e "2 - Restaurer une base de données"
echo -e "3 - Créer un utilisateur dédié au sauvegarde"
echo -e "4 - Afficher la listes des utilisateurs mariadb"
echo -e "5 - Exit"
echo
read -p "Choisir votre action ? " choice
echo

case "$choice" in
     1) SaveDB ;;
     2) RestoreDB ;;
     3) UserCreate ;;
     4) UserList ;;
     5) exit 1 ;;
esac
done


