sqlmig: ajout de la restauration de la base test à partir d'une copie de la prod

This commit is contained in:
Jephté Clain 2018-09-24 09:20:24 +04:00
parent a5be8d8770
commit 4ad84c0c47
1 changed files with 66 additions and 0 deletions

66
sqlmig
View File

@ -116,6 +116,15 @@ OPTIONS
-c, --connect -c, --connect
Se connecter avec le client natif (mysql ou sqlplus) sur la base de Se connecter avec le client natif (mysql ou sqlplus) sur la base de
données courante. données courante.
-r, --restore-test
Restaurer une sauvegarde d'une base de production sur la test. Cette
option n'est (actuellement) supportée que pour MySQL.
L'argument attendu est un fichier de sauvegarde DATABASE.sql[.gz]
effectué avec la commande
mysqldump --databases --add-drop-database DATABASE
Dans le fichier spécifié, on remplace toutes les occurences de DATABASE
par DATABASE_test, ensuite on lance (re)création de la base de données
mysql <DATABASE_test.sql
--update-all --update-all
Mettre à jour la base de données. C'est l'option par défaut Mettre à jour la base de données. C'est l'option par défaut
-t, --updatedir UPDATEDIR -t, --updatedir UPDATEDIR
@ -948,6 +957,7 @@ args=(
-0,--init action=init -0,--init action=init
-e:,--export: '$action=export; set@ exportdir' -e:,--export: '$action=export; set@ exportdir'
-c,--connect action=connect -c,--connect action=connect
-r,--restore-test action=restore_test
--update-all action=update --update-all action=update
-t:,--updatedir: updatedir= -t:,--updatedir: updatedir=
-d:,--databasedir: dbdir= -d:,--databasedir: dbdir=
@ -1185,6 +1195,62 @@ elif [ "$action" == connect ]; then
done done
exit 0 exit 0
################################################################################
elif [ "$action" == restore_test ]; then
set_dbdirs
if [ ${#dbdirs[*]} -gt 1 ]; then
die "Avec --restore-test, une seule base de données doit être spécifiée"
fi
dbdir="${dbdirs[0]}"
[ -n "$dbname" ] || setx dbname=basename "$dbdir"
etitle "$dbname"
ensure_dbtype "$dbdir" "$type"
ensure_dbmode "$dbtype" "$mode"
[ "$dbtype" == mysql ] || die "Seule les bases de type MySQL sont supportées"
# construire les paramètres pour mysql
mysql_set_userargs "$dbdir" "$dbname"
mysql_set_mysqlargs
if [ -n "$suffix" ]; then
estepi "Suffixe: $dbname --> $dbname$suffix"
dbname="$dbname$suffix"
fi
dump="$1"
[ -n "$dump" ] || die "Vous devez spécifier le fichier de dump"
[ -f "$dump" ] || die "$dump: fichier de dump introuvable"
ac_set_tmpdir tmpdir
if [[ "$dump" == *.gz ]]; then
gzip -dc "$dump" >"$tmpdir/prod.sql"
elif [[ "$dump" == *.sql ]]; then
cat "$dump" >"$tmpdir/prod.sql"
else
die "$dump: n'est pas un fichier sql"
fi
dump="$tmpdir/prod.sql"
pname="$dbname"
tname="${dbname}_test"
sed <"$tmpdir/prod.sql" >"$tmpdir/test.sql" "\
s/\`$pname\`/\`$tname\`/g
s/\`${pname}_updates_\`/\`${tname}_updates_\`/g"
enote "Vous allez restaurer un fichier de sauvegarde de le base $pname vers la base $tname"
ask_yesno "Voulez-vous continuer?" X || die
array_del mysqlargs -B # désactiver le mode batch
mysql "${userargs[@]}" "${mysqlargs[@]}" <"$tmpdir/test.sql"
ac_clean "$tmpdir"
exit 0
################################################################################ ################################################################################
elif [ "$action" != update ]; then elif [ "$action" != update ]; then
die "BUG: $action: action non implémentée" die "BUG: $action: action non implémentée"