sqlmig: support des mises à jour administratives
This commit is contained in:
parent
b5e2417514
commit
f1dca506fb
336
sqlmig
336
sqlmig
|
@ -161,6 +161,33 @@ function abort_on_error() {
|
||||||
[ -z "$force" ] && die "$@"
|
[ -z "$force" ] && die "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ensure_dbtype() {
|
||||||
|
local dir="$1" type="$2"
|
||||||
|
if [ "$type" == auto ]; then
|
||||||
|
if [ -f "$dir/my.cnf" ]; then
|
||||||
|
dbtype=mysql
|
||||||
|
elif [ -f "$dir/ora.conf" ]; then
|
||||||
|
dbtype=oracle
|
||||||
|
else
|
||||||
|
die "Vous devez spécifier le type --mysql ou --oracle"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dbtype="$type"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function ensure_dbmode() {
|
||||||
|
local dbtype="$1" mode="$2"
|
||||||
|
if [ "$mode" == auto ]; then
|
||||||
|
if [ "$dbtype" == mysql ]; then
|
||||||
|
is_root && dbmode=prod || dbmode=devel
|
||||||
|
else
|
||||||
|
dbmode=prod
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dbmode="$mode"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# MySQL
|
# MySQL
|
||||||
|
|
||||||
|
@ -261,6 +288,73 @@ function mysql_after_update() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mysql_set_adminargs() {
|
||||||
|
local dir="$1"
|
||||||
|
adminargs=()
|
||||||
|
if [ -f "$dir/my.cnf" ]; then
|
||||||
|
array_add adminargs --defaults-file="$dir/my.cnf"
|
||||||
|
if [ -n "$admindefaults" ]; then
|
||||||
|
array_add adminargs --defaults-extra-file="$admindefaults"
|
||||||
|
fi
|
||||||
|
elif [ -n "$admindefaults" ]; then
|
||||||
|
array_add adminargs --defaults-file="$admindefaults"
|
||||||
|
fi
|
||||||
|
[ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8
|
||||||
|
}
|
||||||
|
function mysql_set_userargs() {
|
||||||
|
local dir="$1" dbname="$2"
|
||||||
|
userargs=()
|
||||||
|
if [ -f "$dir/my.cnf" ]; then
|
||||||
|
array_add userargs --defaults-file="$dir/my.cnf"
|
||||||
|
if [ -n "$userdefaults" ]; then
|
||||||
|
array_add userargs --defaults-extra-file="$userdefaults"
|
||||||
|
elif [ -f "$dir/my-${dbname}.cnf" ]; then
|
||||||
|
array_add userargs --defaults-extra-file="$dir/my-${dbname}.cnf"
|
||||||
|
fi
|
||||||
|
elif [ -n "$userdefaults" ]; then
|
||||||
|
array_add userargs --defaults-file="$userdefaults"
|
||||||
|
elif [ -f "$dir/my-${dbname}.cnf" ]; then
|
||||||
|
array_add userargs --defaults-file="$dir/my-${dbname}.cnf"
|
||||||
|
fi
|
||||||
|
[ ${#userargs[*]} -gt 0 ] || array_add userargs --default-character-set utf8
|
||||||
|
}
|
||||||
|
function mysql_set_mysqlargs() {
|
||||||
|
mysqlargs=()
|
||||||
|
[ -n "$user" ] && array_add mysqlargs -u "$user"
|
||||||
|
[ -n "$pwset" ] && array_add mysqlargs -p"$password"
|
||||||
|
[ -n "$host" ] && array_add mysqlargs -h "$host"
|
||||||
|
[ -n "$port" ] && array_add mysqlargs -P "$port"
|
||||||
|
[ -n "$socket" ] && array_add mysqlargs -S "$socket"
|
||||||
|
[ -n "$charset" ] && array_add mysqlargs --default-character-set "$charset"
|
||||||
|
[ -n "$force" ] && array_add mysqlargs -f
|
||||||
|
array_add mysqlargs -B
|
||||||
|
}
|
||||||
|
MYSQL_ADMIN_CONF_DONE=
|
||||||
|
function mysql_admin_update() {
|
||||||
|
local name="$1" update="$2" done
|
||||||
|
if [ -z "$MYSQL_ADMIN_CONF_DONE" ]; then
|
||||||
|
MYSQL_ADMIN_CONF_DONE=1
|
||||||
|
mysql_tbconf
|
||||||
|
fi
|
||||||
|
setx done=mysql_get_done "$name" || die
|
||||||
|
[ -n "$done" ] && return
|
||||||
|
|
||||||
|
estep "$name"
|
||||||
|
mysql_before_update || die
|
||||||
|
cat "$update" | mysql_admin_ve || abort_on_error
|
||||||
|
mysql_after_update || die
|
||||||
|
}
|
||||||
|
function mysql_user_update() {
|
||||||
|
local name="$1" update="$2" dbname="$3" done
|
||||||
|
setx done=mysql_get_done "$name" "$dbname" || die
|
||||||
|
[ -n "$done" ] && return
|
||||||
|
|
||||||
|
estep "$name"
|
||||||
|
mysql_before_update "$dbname" || die
|
||||||
|
cat "$update" | mysql_user_ve || abort_on_error
|
||||||
|
mysql_after_update "$dbname" || die
|
||||||
|
}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Oracle
|
# Oracle
|
||||||
|
|
||||||
|
@ -473,6 +567,81 @@ commit;"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function oracle_ensure_opdir() {
|
||||||
|
if [ -z "$OPDIR" ]; then
|
||||||
|
ac_set_tmpdir OPDIR
|
||||||
|
>"$SQLMIGLOG"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function oracle_source_adminconf() {
|
||||||
|
local dir="$1"
|
||||||
|
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG
|
||||||
|
[ -f "$dir/ora.conf" ] && source "$dir/ora.conf"
|
||||||
|
[ -n "$admindefaults" ] && {
|
||||||
|
source "$admindefaults" || die
|
||||||
|
}
|
||||||
|
[ -n "$oracle_sid" ] && ORACLE_SID="$oracle_sid"
|
||||||
|
[ -n "$nls_lang" ] && NLS_LANG="$nls_lang"
|
||||||
|
export ORACLE_SID NLS_LANG
|
||||||
|
if [ -n "$ADMINCONNECT" ]; then
|
||||||
|
ADMINDBA=
|
||||||
|
else
|
||||||
|
ADMINCONNECT=/
|
||||||
|
ADMINDBA=1
|
||||||
|
fi
|
||||||
|
[ -n "$SQLMIGLOG" ] || SQLMIGLOG="/tmp/sqlmig-${ORACLE_SID}-${dbname}.log"
|
||||||
|
}
|
||||||
|
function oracle_source_userconf() {
|
||||||
|
local dir="$1" dbname="$2"
|
||||||
|
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG
|
||||||
|
[ -f "$dir/ora.conf" ] && source "$dir/ora.conf"
|
||||||
|
[ -f "$dir/ora-${dbname}.conf" ] && source "$dir/ora-${dbname}.conf"
|
||||||
|
[ -n "$userdefaults" ] && {
|
||||||
|
source "$userdefaults" || die
|
||||||
|
}
|
||||||
|
[ -n "$oracle_sid" ] && ORACLE_SID="$oracle_sid"
|
||||||
|
[ -n "$nls_lang" ] && NLS_LANG="$nls_lang"
|
||||||
|
export ORACLE_SID NLS_LANG
|
||||||
|
if [ -n "$ADMINCONNECT" ]; then
|
||||||
|
ADMINDBA=
|
||||||
|
else
|
||||||
|
ADMINCONNECT=/
|
||||||
|
ADMINDBA=1
|
||||||
|
fi
|
||||||
|
if [ -n "$USERCONNECT" ]; then
|
||||||
|
USERDBA=
|
||||||
|
else
|
||||||
|
USERCONNECT=/
|
||||||
|
USERDBA=1
|
||||||
|
fi
|
||||||
|
[ -n "$SQLMIGLOG" ] || SQLMIGLOG="/tmp/sqlmig-${ORACLE_SID}-${dbname}.log"
|
||||||
|
}
|
||||||
|
ORACLE_ADMIN_CONF_DONE=
|
||||||
|
function oracle_admin_update() {
|
||||||
|
local name="$1" update="$2" done
|
||||||
|
if [ -z "$ORACLE_ADMIN_CONF_DONE" ]; then
|
||||||
|
ORACLE_ADMIN_CONF_DONE=
|
||||||
|
oracle_tbconf
|
||||||
|
fi
|
||||||
|
setx done=oracle_get_done "$name" || die
|
||||||
|
[ -n "$done" ] && return
|
||||||
|
|
||||||
|
estep "$name"
|
||||||
|
oracle_before_update || die
|
||||||
|
cat "$update" | oracle_admin_ve || abort_on_error
|
||||||
|
oracle_after_update || die
|
||||||
|
}
|
||||||
|
function oracle_user_update() {
|
||||||
|
local name="$1" update="$2" dbname="$3" done
|
||||||
|
setx done=oracle_get_done "$name" "$dbname" || die
|
||||||
|
[ -n "$done" ] && return
|
||||||
|
|
||||||
|
estep "$name"
|
||||||
|
oracle_before_update "$dbname" || die
|
||||||
|
cat "$update" | oracle_user_ve || abort_on_error
|
||||||
|
oracle_after_update "$dbname" || die
|
||||||
|
}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
admindefaults=
|
admindefaults=
|
||||||
|
@ -722,32 +891,49 @@ fi
|
||||||
# répertoire temporaire pour Oracle
|
# répertoire temporaire pour Oracle
|
||||||
OPDIR=
|
OPDIR=
|
||||||
|
|
||||||
|
if [ -n "$updatedir" ]; then
|
||||||
|
## mises à jour administratives
|
||||||
|
array_lsfiles updates "$updatedir" "*.sql"
|
||||||
|
if [ ${#updates[*]} -gt 0 ]; then
|
||||||
|
ensure_dbtype "$updatedir" "$type"
|
||||||
|
if [ "$dbtype" == mysql ]; then
|
||||||
|
# construire les paramètres pour mysql
|
||||||
|
mysql_set_adminargs "$updatedir"
|
||||||
|
mysql_set_mysqlargs
|
||||||
|
|
||||||
|
# Mises à jour
|
||||||
|
etitled "Mises à jour admin"
|
||||||
|
for update in "${updates[@]}"; do
|
||||||
|
setx name=basename "$update"
|
||||||
|
mysql_admin_update "$name" "$update"
|
||||||
|
done
|
||||||
|
eend; eclearp
|
||||||
|
|
||||||
|
elif [ "$dbtype" == oracle ]; then
|
||||||
|
# lire les paramètres
|
||||||
|
oracle_source_adminconf "$updatedir"
|
||||||
|
oracle_ensure_opdir
|
||||||
|
|
||||||
|
# Mises à jour
|
||||||
|
etitled "Mises à jour"
|
||||||
|
for update in "${updates[@]}"; do
|
||||||
|
setx name=basename "$update"
|
||||||
|
oracle_admin_update "$name" "$update"
|
||||||
|
done
|
||||||
|
eend; eclearp
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
## mises à jour utilisateur
|
||||||
force_dbname="$dbname"
|
force_dbname="$dbname"
|
||||||
for dbdir in "${dbdirs[@]}"; do
|
for dbdir in "${dbdirs[@]}"; do
|
||||||
dbname="$force_dbname"
|
dbname="$force_dbname"
|
||||||
[ -n "$dbname" ] || setx dbname=basename "$dbdir"
|
[ -n "$dbname" ] || setx dbname=basename "$dbdir"
|
||||||
etitle "$dbname"
|
etitle "$dbname"
|
||||||
|
|
||||||
if [ "$type" == auto ]; then
|
ensure_dbtype "$dbdir" "$type"
|
||||||
if [ -f "$dbdir/my.cnf" ]; then
|
ensure_dbmode "$dbtype" "$mode"
|
||||||
dbtype=mysql
|
|
||||||
elif [ -f "$dbdir/ora.conf" ]; then
|
|
||||||
dbtype=oracle
|
|
||||||
else
|
|
||||||
die "Vous devez spécifier le type --mysql ou --oracle"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
dbtype="$type"
|
|
||||||
fi
|
|
||||||
if [ "$mode" == auto ]; then
|
|
||||||
if [ "$dbtype" == mysql ]; then
|
|
||||||
is_root && dbmode=prod || dbmode=devel
|
|
||||||
else
|
|
||||||
dbmode=prod
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
dbmode="$mode"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# lister les mises à jour disponibles
|
# lister les mises à jour disponibles
|
||||||
drops=()
|
drops=()
|
||||||
|
@ -767,41 +953,9 @@ for dbdir in "${dbdirs[@]}"; do
|
||||||
############################################################################
|
############################################################################
|
||||||
if [ "$dbtype" == mysql ]; then
|
if [ "$dbtype" == mysql ]; then
|
||||||
# construire les paramètres pour mysql
|
# construire les paramètres pour mysql
|
||||||
adminargs=()
|
mysql_set_adminargs "$dbdir"
|
||||||
if [ -f "$dbdir/my.cnf" ]; then
|
mysql_set_userargs "$dbdir" "$dbname"
|
||||||
array_add adminargs --defaults-file="$dbdir/my.cnf"
|
mysql_set_mysqlargs
|
||||||
if [ -n "$admindefaults" ]; then
|
|
||||||
array_add adminargs --defaults-extra-file="$admindefaults"
|
|
||||||
fi
|
|
||||||
elif [ -n "$admindefaults" ]; then
|
|
||||||
array_add adminargs --defaults-file="$admindefaults"
|
|
||||||
fi
|
|
||||||
[ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8
|
|
||||||
|
|
||||||
userargs=()
|
|
||||||
if [ -f "$dbdir/my.cnf" ]; then
|
|
||||||
array_add userargs --defaults-file="$dbdir/my.cnf"
|
|
||||||
if [ -n "$userdefaults" ]; then
|
|
||||||
array_add userargs --defaults-extra-file="$userdefaults"
|
|
||||||
elif [ -f "$dbdir/my-${dbname}.cnf" ]; then
|
|
||||||
array_add userargs --defaults-extra-file="$dbdir/my-${dbname}.cnf"
|
|
||||||
fi
|
|
||||||
elif [ -n "$userdefaults" ]; then
|
|
||||||
array_add userargs --defaults-file="$userdefaults"
|
|
||||||
elif [ -f "$dbdir/my-${dbname}.cnf" ]; then
|
|
||||||
array_add userargs --defaults-file="$dbdir/my-${dbname}.cnf"
|
|
||||||
fi
|
|
||||||
[ ${#userargs[*]} -gt 0 ] || array_add userargs --default-character-set utf8
|
|
||||||
|
|
||||||
mysqlargs=()
|
|
||||||
[ -n "$user" ] && array_add mysqlargs -u "$user"
|
|
||||||
[ -n "$pwset" ] && array_add mysqlargs -p"$password"
|
|
||||||
[ -n "$host" ] && array_add mysqlargs -h "$host"
|
|
||||||
[ -n "$port" ] && array_add mysqlargs -P "$port"
|
|
||||||
[ -n "$socket" ] && array_add mysqlargs -S "$socket"
|
|
||||||
[ -n "$charset" ] && array_add mysqlargs --default-character-set "$charset"
|
|
||||||
[ -n "$force" ] && array_add mysqlargs -f
|
|
||||||
array_add mysqlargs -B
|
|
||||||
|
|
||||||
# Suppression
|
# Suppression
|
||||||
if [ -n "$drop" ]; then
|
if [ -n "$drop" ]; then
|
||||||
|
@ -835,29 +989,12 @@ for dbdir in "${dbdirs[@]}"; do
|
||||||
# Mises à jour
|
# Mises à jour
|
||||||
etitled "Mises à jour"
|
etitled "Mises à jour"
|
||||||
mysql_tbconf "$dbname"
|
mysql_tbconf "$dbname"
|
||||||
admin_conf=1
|
|
||||||
for update in "${updates[@]}"; do
|
for update in "${updates[@]}"; do
|
||||||
setx name=basename "$update"
|
setx name=basename "$update"
|
||||||
if have_tag admin "$update"; then
|
if have_tag admin "$update"; then
|
||||||
if [ -n "$admin_conf" ]; then
|
mysql_admin_update "$name" "$update"
|
||||||
admin_conf=
|
|
||||||
mysql_tbconf
|
|
||||||
fi
|
|
||||||
setx done=mysql_get_done "$name" || die
|
|
||||||
[ -n "$done" ] && continue
|
|
||||||
|
|
||||||
estep "$name"
|
|
||||||
mysql_before_update || die
|
|
||||||
cat "$update" | mysql_admin_ve || abort_on_error
|
|
||||||
mysql_after_update || die
|
|
||||||
else
|
else
|
||||||
setx done=mysql_get_done "$name" "$dbname" || die
|
mysql_user_update "$name" "$update" "$dbname"
|
||||||
[ -n "$done" ] && continue
|
|
||||||
|
|
||||||
estep "$name"
|
|
||||||
mysql_before_update "$dbname" || die
|
|
||||||
cat "$update" | mysql_user_ve || abort_on_error
|
|
||||||
mysql_after_update "$dbname" || die
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
eend; eclearp
|
eend; eclearp
|
||||||
|
@ -867,34 +1004,8 @@ for dbdir in "${dbdirs[@]}"; do
|
||||||
[ -n "$OPDIR" ] || ac_set_tmpdir OPDIR
|
[ -n "$OPDIR" ] || ac_set_tmpdir OPDIR
|
||||||
|
|
||||||
# lire les paramètres
|
# lire les paramètres
|
||||||
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG
|
oracle_source_userconf "$dbdir" "$dbname"
|
||||||
if [ -n "$admindefaults" ]; then
|
oracle_ensure_opdir
|
||||||
source "$admindefaults" || die
|
|
||||||
elif [ -f "$dbdir/ora.conf" ]; then
|
|
||||||
source "$dbdir/ora.conf"
|
|
||||||
fi
|
|
||||||
if [ -n "$userdefaults" ]; then
|
|
||||||
source "$userdefaults" || die
|
|
||||||
elif [ -f "$dbdir/ora-${dbname}.conf" ]; then
|
|
||||||
source "$dbdir/ora-${dbname}.conf"
|
|
||||||
fi
|
|
||||||
[ -n "$oracle_sid" ] && ORACLE_SID="$oracle_sid"
|
|
||||||
[ -n "$nls_lang" ] && NLS_LANG="$nls_lang"
|
|
||||||
export ORACLE_SID NLS_LANG
|
|
||||||
if [ -n "$ADMINCONNECT" ]; then
|
|
||||||
ADMINDBA=
|
|
||||||
else
|
|
||||||
ADMINCONNECT=/
|
|
||||||
ADMINDBA=1
|
|
||||||
fi
|
|
||||||
if [ -n "$USERCONNECT" ]; then
|
|
||||||
USERDBA=
|
|
||||||
else
|
|
||||||
USERCONNECT=/
|
|
||||||
USERDBA=1
|
|
||||||
fi
|
|
||||||
[ -n "$SQLMIGLOG" ] || SQLMIGLOG="/tmp/sqlmig-${ORACLE_SID}-${dbname}.log"
|
|
||||||
>"$SQLMIGLOG"
|
|
||||||
|
|
||||||
# Suppression
|
# Suppression
|
||||||
if [ -n "$drop" ]; then
|
if [ -n "$drop" ]; then
|
||||||
|
@ -928,29 +1039,12 @@ for dbdir in "${dbdirs[@]}"; do
|
||||||
# Mises à jour
|
# Mises à jour
|
||||||
etitled "Mises à jour"
|
etitled "Mises à jour"
|
||||||
oracle_tbconf "$dbname"
|
oracle_tbconf "$dbname"
|
||||||
admin_conf=1
|
|
||||||
for update in "${updates[@]}"; do
|
for update in "${updates[@]}"; do
|
||||||
setx name=basename "$update"
|
setx name=basename "$update"
|
||||||
if have_tag admin "$update"; then
|
if have_tag admin "$update"; then
|
||||||
if [ -n "$admin_conf" ]; then
|
oracle_admin_update "$name" "$update"
|
||||||
admin_conf=
|
|
||||||
oracle_tbconf
|
|
||||||
fi
|
|
||||||
setx done=oracle_get_done "$name" || die
|
|
||||||
[ -n "$done" ] && continue
|
|
||||||
|
|
||||||
estep "$name"
|
|
||||||
oracle_before_update || die
|
|
||||||
cat "$update" | oracle_admin_ve || abort_on_error
|
|
||||||
oracle_after_update || die
|
|
||||||
else
|
else
|
||||||
setx done=oracle_get_done "$name" "$dbname" || die
|
oracle_user_update "$name" "$update" "$dbname"
|
||||||
[ -n "$done" ] && continue
|
|
||||||
|
|
||||||
estep "$name"
|
|
||||||
oracle_before_update "$dbname" || die
|
|
||||||
cat "$update" | oracle_user_ve || abort_on_error
|
|
||||||
oracle_after_update "$dbname" || die
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
eend; eclearp
|
eend; eclearp
|
||||||
|
|
Loading…
Reference in New Issue