Skip to content

Commit 02b38d0

Browse files
committed
Add option to create database dump from sql script
Loosely copied from the domjudge-scripts repo. This does remove the prefix question as just exiting and letting the user reword less restrictive.
1 parent 6304f74 commit 02b38d0

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ inplace-conf-common: dist
210210
--with-domserver_tmpdir=$(CURDIR)/output/tmp \
211211
--with-judgehost_tmpdir=$(CURDIR)/output/tmp \
212212
--with-judgehost_judgedir=$(CURDIR)/output/judgings \
213+
--with-domserver_databasedumpdir=$(CURDIR)/output/db-dumps \
213214
--with-baseurl='http://localhost/domjudge/' \
214215
CFLAGS='$(MAINT_CXFLAGS) -std=c11' \
215216
CXXFLAGS='$(MAINT_CXFLAGS) -std=c++11' \

configure.ac

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ if test "x$FHS_ENABLED" = xyes ; then
172172
AC_SUBST(domserver_rundir, $localstatedir/run/${PACKAGE_TARNAME})
173173
AC_SUBST(domserver_tmpdir, /tmp)
174174
AC_SUBST(domserver_exampleprobdir, $datadir/${PACKAGE_TARNAME}/example_problems)
175+
AC_SUBST(domserver_databasedumpdir, $localstatedir/lib/${PACKAGE_TARNAME}/db-dumps)
175176
fi
176177

177178
if test "x$JUDGEHOST_BUILD_ENABLED" = xyes; then
@@ -224,6 +225,7 @@ AX_PATH(domserver_logdir, [$domserver_root/log])
224225
AX_PATH(domserver_rundir, [$domserver_root/run])
225226
AX_PATH(domserver_tmpdir, [$domserver_root/tmp])
226227
AX_PATH(domserver_exampleprobdir, [$domserver_root/example_problems])
228+
AX_PATH(domserver_databasedumpdir, [$domserver_root/db-dumps])
227229
fi
228230
if test "x$JUDGEHOST_BUILD_ENABLED" = xyes; then
229231
AX_WITH_COMMENT(6,[ ])
@@ -386,6 +388,7 @@ echo " - sql..............: AX_VAR_EXPAND($domserver_sqldir)"
386388
echo " - tmp..............: AX_VAR_EXPAND($domserver_tmpdir)"
387389
echo " - webapp...........: AX_VAR_EXPAND($domserver_webappdir)"
388390
echo " - example_problems.: AX_VAR_EXPAND($domserver_exampleprobdir)"
391+
echo " - database_dumps...: AX_VAR_EXPAND($domserver_databasedumpdir)"
389392
fi
390393
if test "x$JUDGEHOST_BUILD_ENABLED" = xyes; then
391394
echo ""

paths.mk.in

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ domserver_logdir = @domserver_logdir@
9191
domserver_rundir = @domserver_rundir@
9292
domserver_tmpdir = @domserver_tmpdir@
9393
domserver_exampleprobdir = @domserver_exampleprobdir@
94+
domserver_databasedumpdir = @domserver_databasedumpdir@
9495
PHPVERSION = @PHPVERSION@
9596

9697
judgehost_bindir = @judgehost_bindir@
@@ -114,7 +115,7 @@ domserver_dirs = $(domserver_bindir) $(domserver_etcdir) \
114115
$(domserver_libdir) $(domserver_libvendordir) \
115116
$(domserver_logdir) $(domserver_rundir) \
116117
$(addprefix $(domserver_webappdir)/public/images/,affiliations countries teams) \
117-
$(domserver_exampleprobdir)
118+
$(domserver_exampleprobdir) $(domserver_databasedumpdir)
118119

119120
judgehost_dirs = $(judgehost_bindir) $(judgehost_etcdir) $(judgehost_libdir) \
120121
$(judgehost_libjudgedir) $(judgehost_logdir) \
@@ -142,6 +143,7 @@ define substconfigvars
142143
-e 's,@domserver_rundir[@],@domserver_rundir@,g' \
143144
-e 's,@domserver_tmpdir[@],@domserver_tmpdir@,g' \
144145
-e 's,@domserver_exampleprobdir[@],@domserver_exampleprobdir@,g' \
146+
-e 's,@domserver_databasedumpdir[@],@domserver_databasedumpdir@,g' \
145147
-e 's,@judgehost_bindir[@],@judgehost_bindir@,g' \
146148
-e 's,@judgehost_etcdir[@],@judgehost_etcdir@,g' \
147149
-e 's,@judgehost_libdir[@],@judgehost_libdir@,g' \

sql/dj_setup_database.in

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ BINDIR="@domserver_bindir@"
1010
ETCDIR="@domserver_etcdir@"
1111
WEBAPPDIR="@domserver_webappdir@"
1212
EXAMPLEPROBDIR="@domserver_exampleprobdir@"
13+
DATABASEDUMPDIR="@domserver_databasedumpdir@"
1314

1415
PASSWDFILE="$ETCDIR/dbpasswords.secret"
1516

@@ -22,7 +23,7 @@ verbose()
2223

2324
usage() {
2425
cat <<EOF
25-
Usage: $0 [option]... <command>
26+
Usage: $0 [option]... <command> [argument]
2627
2728
Commands:
2829
status check database installation status
@@ -34,6 +35,7 @@ Commands:
3435
install-examples install examples only
3536
install-loadtest configure for load testing. WARNING: CREATES A LOT OF EXTRA ITEMS!
3637
upgrade upgrade MySQL database schema to current version
38+
dump [filename] backup the current database to file (without .sql.gz suffix)
3739
3840
Options:
3941
-u <user> connect to MySQL with DB admin <user>
@@ -48,8 +50,7 @@ not have to pass any of the options above.
4850
EOF
4951
}
5052

51-
# Wrapper around mysql command to allow setting options, user, etc.
52-
mysql()
53+
mysql_options()
5354
{
5455
local user pass
5556

@@ -68,7 +69,13 @@ mysql()
6869
fi
6970

7071
[ -z "$USE_SOCKET" ] && port="-P$DBPORT"
71-
command mysql $user ${pass:+"$pass"} -h "$DBHOST" ${port:+"$port"} --silent --skip-column-names "$@"
72+
echo $user ${pass:+"$pass"} -h "$DBHOST" ${port:+"$port"}
73+
}
74+
75+
# Wrapper around mysql command to allow setting options, user, etc.
76+
mysql()
77+
{
78+
command mysql $(mysql_options) --silent --skip-column-names "$@"
7279
}
7380

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

244+
create_database_dump () {
245+
sudo mysqldump $(mysql_options) --opt --skip-lock-tables domjudge | pv | gzip > "$DATABASEDUMPDIR/${1}.sql.gz"
246+
}
247+
237248
### Script starts here ###
238249

239250
# Parse command-line options:
@@ -354,6 +365,27 @@ upgrade)
354365
verbose "DOMjudge database upgrade completed."
355366
;;
356367

368+
dump)
369+
read_dbpasswords
370+
DUMPNAME="$2"
371+
if [ -z "$DUMPNAME" ]; then
372+
usage
373+
exit 1
374+
fi
375+
376+
if [ -f "${DATABASEDUMPDIR}/${DUMPNAME}.sql.gz" ]; then
377+
while true; do
378+
read -p "Overwrite existing database dump (y/N)? " yn
379+
case $yn in
380+
[Yy]* ) break ;;
381+
''|[Nn]* ) exit 0;;
382+
esac
383+
done
384+
fi
385+
create_database_dump $DUMPNAME
386+
exit 0
387+
;;
388+
357389
*)
358390
echo "Error: Unknown subcommand '$1'"
359391
usage

0 commit comments

Comments
 (0)