Skip to content

Commit

Permalink
Add option to create database dump from sql script
Browse files Browse the repository at this point in the history
Loosely copied from the domjudge-scripts repo.

Remove side effect

Rewording remove prefix of "snapshot-"

Move to output location

Add warning on overwriting old database content

Remove cli flag in favor of adding name as parameter

Handle the comments
  • Loading branch information
vmcj committed Oct 22, 2023
1 parent a86b885 commit ea42be8
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 5 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ inplace-conf-common: dist
--with-domserver_tmpdir=$(CURDIR)/output/tmp \
--with-judgehost_tmpdir=$(CURDIR)/output/tmp \
--with-judgehost_judgedir=$(CURDIR)/output/judgings \
--with-domserver_databasedumpdir=$(CURDIR)/output/db-dumps \
--with-baseurl='http://localhost/domjudge/' \
CFLAGS='$(MAINT_CXFLAGS) -std=c11' \
CXXFLAGS='$(MAINT_CXFLAGS) -std=c++11' \
Expand Down
3 changes: 3 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ if test "x$FHS_ENABLED" = xyes ; then
AC_SUBST(domserver_rundir, $localstatedir/run/${PACKAGE_TARNAME})
AC_SUBST(domserver_tmpdir, /tmp)
AC_SUBST(domserver_exampleprobdir, $datadir/${PACKAGE_TARNAME}/example_problems)
AC_SUBST(domserver_databasedumpdir, $localstatedir/lib/${PACKAGE_TARNAME}/db-dumps)

AC_SUBST(judgehost_root, '')
AC_SUBST(judgehost_bindir, $bindir)
Expand Down Expand Up @@ -200,6 +201,7 @@ AX_PATH(domserver_logdir, [$domserver_root/log])
AX_PATH(domserver_rundir, [$domserver_root/run])
AX_PATH(domserver_tmpdir, [$domserver_root/tmp])
AX_PATH(domserver_exampleprobdir, [$domserver_root/example_problems])
AX_PATH(domserver_databasedumpdir, [$domserver_root/db-dumps])
AX_WITH_COMMENT(6,[ ])
AX_PATH(judgehost_bindir, [$judgehost_root/bin])
AX_PATH(judgehost_etcdir, [$judgehost_root/etc])
Expand Down Expand Up @@ -348,6 +350,7 @@ echo " - sql..............: AX_VAR_EXPAND($domserver_sqldir)"
echo " - tmp..............: AX_VAR_EXPAND($domserver_tmpdir)"
echo " - webapp...........: AX_VAR_EXPAND($domserver_webappdir)"
echo " - example_problems.: AX_VAR_EXPAND($domserver_exampleprobdir)"
echo " - database_dumps...: AX_VAR_EXPAND($domserver_databasedumpdir)"
echo ""
echo " * judgehost...........: AX_VAR_EXPAND($judgehost_root)"
echo " - bin..............: AX_VAR_EXPAND($judgehost_bindir)"
Expand Down
4 changes: 3 additions & 1 deletion paths.mk.in
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ domserver_logdir = @domserver_logdir@
domserver_rundir = @domserver_rundir@
domserver_tmpdir = @domserver_tmpdir@
domserver_exampleprobdir = @domserver_exampleprobdir@
domserver_databasedumpdir = @domserver_databasedumpdir@
PHPVERSION = @PHPVERSION@

judgehost_bindir = @judgehost_bindir@
Expand All @@ -108,7 +109,7 @@ domserver_dirs = $(domserver_bindir) $(domserver_etcdir) \
$(domserver_libdir) $(domserver_libvendordir) \
$(domserver_logdir) $(domserver_rundir) \
$(addprefix $(domserver_webappdir)/public/images/,affiliations countries teams) \
$(domserver_exampleprobdir)
$(domserver_exampleprobdir) $(domserver_databasedumpdir)

judgehost_dirs = $(judgehost_bindir) $(judgehost_etcdir) $(judgehost_libdir) \
$(judgehost_libjudgedir) $(judgehost_logdir) \
Expand Down Expand Up @@ -136,6 +137,7 @@ define substconfigvars
-e 's,@domserver_rundir[@],@domserver_rundir@,g' \
-e 's,@domserver_tmpdir[@],@domserver_tmpdir@,g' \
-e 's,@domserver_exampleprobdir[@],@domserver_exampleprobdir@,g' \
-e 's,@domserver_databasedumpdir[@],@domserver_databasedumpdir@,g' \
-e 's,@judgehost_bindir[@],@judgehost_bindir@,g' \
-e 's,@judgehost_etcdir[@],@judgehost_etcdir@,g' \
-e 's,@judgehost_libdir[@],@judgehost_libdir@,g' \
Expand Down
46 changes: 42 additions & 4 deletions sql/dj_setup_database.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ BINDIR="@domserver_bindir@"
ETCDIR="@domserver_etcdir@"
WEBAPPDIR="@domserver_webappdir@"
EXAMPLEPROBDIR="@domserver_exampleprobdir@"
DATABASEDUMPDIR="@domserver_databasedumpdir@"

PASSWDFILE="$ETCDIR/dbpasswords.secret"

Expand All @@ -22,7 +23,7 @@ verbose()

usage() {
cat <<EOF
Usage: $0 [option]... <command>
Usage: $0 [option]... <command> [argument]
Commands:
status check database installation status
Expand All @@ -34,6 +35,7 @@ Commands:
install-examples install examples only
install-loadtest configure for load testing. WARNING: CREATES A LOT OF EXTRA ITEMS!
upgrade upgrade MySQL database schema to current version
dump [filename] backup the current database to file (without .tar.gz suffix)
Options:
-u <user> connect to MySQL with DB admin <user>
Expand All @@ -48,8 +50,7 @@ not have to pass any of the options above.
EOF
}

# Wrapper around mysql command to allow setting options, user, etc.
mysql()
mysql_options()
{
local user pass

Expand All @@ -68,7 +69,13 @@ mysql()
fi

[ -z "$USE_SOCKET" ] && port="-P$DBPORT"
command mysql $user ${pass:+"$pass"} -h "$DBHOST" ${port:+"$port"} --silent --skip-column-names "$@"
echo $user ${pass:+"$pass"} -h "$DBHOST" ${port:+"$port"}
}

# Wrapper around mysql command to allow setting options, user, etc.
mysql()
{
command mysql $(mysql_options) --silent --skip-column-names "$@"
}

# Quick shell hack to get a key from an INI file.
Expand Down Expand Up @@ -234,6 +241,10 @@ install_examples()
( cd "$EXAMPLEPROBDIR" && yes y | "$BINDIR"/import-contest )
}

create_database_dump () {
sudo mysqldump $(mysql_options) --opt --skip-lock-tables domjudge | pv | gzip > "$DATABASEDUMPDIR/${1}.sql.gz"
}

### Script starts here ###

# Parse command-line options:
Expand Down Expand Up @@ -354,6 +365,33 @@ upgrade)
verbose "DOMjudge database upgrade completed."
;;

dump)
read_dbpasswords
DUMPNAME="$2"
if [ -z "$DUMPNAME" ]; then
usage
exit 1
fi

if [ -f "${DATABASEDUMPDIR}/${DUMPNAME}.sql.gz" ]; then
while true; do
read -p "Overwrite existing database dump (y/N)? " yn
case $yn in
[Yy]* ) create_database_dump $DUMPNAME; exit 0 ;;
''|[Nn]* ) break;;
esac
done
else
create_database_dump $DUMPNAME; exit 0
fi

read -p "Provide prefix or say 'no' to abort. Format: [prefix]-$1 " prefix
case $prefix in
''|[Nn]o|[Nn] ) exit 2; break;;
* ) create_database_dump ${prefix}-${DUMPNAME}; break;;
esac
;;

*)
echo "Error: Unknown subcommand '$1'"
usage
Expand Down

0 comments on commit ea42be8

Please sign in to comment.