Table des matières

Mysql

Quelques tips que je passe à chaque fois 3h à retrouver… 😅

Créer un utilisateur et lui affecter une base

snippet.sql
CREATE DATABASE dbname;
CREATE USER "dbuser"@"localhost";
SET password FOR "dbuser"@"localhost" = password('dbpassword');
GRANT ALL PRIVILEGES ON dbname.* TO "dbuser"@"localhost" IDENTIFIED BY "dbpassword";
FLUSH PRIVILEGES;
EXIT;

Pensez à remplacer :

Sauvegarde et restauration

Sauvegarde

Commande exécutée en root sur une Debian (pas de mot de passe depuis le root local) :

snippet.bash
mysqldump dbname > dump.sql

Un script que je lance dans un cron journalier et qui backup l'ensemble de base Mysql d'un serveur :

snippet.bash
#! /bin/bash
 
BASE_DIR="/var/backup/mysql"
DATE=$(date +%Y%m%d%H%M)
LOG=''
PURGEDAYS=8
 
echo "Backing up MySQL databases..."
mysql --defaults-file=/etc/mysql/debian.cnf --batch --skip-column-names -e "show databases" |
while read DB ; do
        if [ "${DB}" == "information_schema" -o "${DB}" == "performance_schema" ]; then
                echo "Ignoring "${DB}" "
                OPT="--skip-lock-tables "
        else
                echo "Dumping "${DB}" ..."
                OPT="--opt"
                mysqldump --defaults-file=/etc/mysql/debian.cnf --events --ignore-table=mysql.events "${OPT}" "${DB}" -r${BASE_DIR}/${DB}_${DATE}.sql
                gzip ${BASE_DIR}/${DB}_${DATE}.sql
        fi
done
 
# purge old dumps
echo " "
echo " "
echo "Removing old backup"
find ${BASE_DIR}/ -name "*.sql*" -mtime +${PURGEDAYS} -delete -print

Restauration

Commande exécutée en root :

snippet.bash
mysql -u root -p dbname < dump.sql