da7177f536
The line to use the --databases flag with mysqldump by default was accidentally removed from koha-dump when the --schema-only option was added. This makes all backups act as if koha-dump is called with the --without-db-name flag, causing koha-restore to fail to restore the database because it's neither CREATEd or USEd. This patch restores that line To test: 1 - sudo debian/scripts/koha-dump kohadev 2 - zcat /var/spool/koha/kohadev/kohadev-2021-07-28.sql.gz | grep DATABASE 3 - Notice no output 4 - Apply patch 5 - sudo debian/scripts/koha-dump kohadev 6 - zcat /var/spool/koha/kohadev/kohadev-2021-07-28.sql.gz | grep DATABASE 7 - You get the line: CREATE DATABASE /*!32312 IF NOT EXISTS*/ `koha_kohadev` /*!40100 DEFAULT CHARACTER SET latin1 */; Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
178 lines
5.1 KiB
Bash
Executable file
178 lines
5.1 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# koha-dump: dump all contents and configs for a Koha site
|
|
# Copyright 2010 Catalyst IT, Ltd
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
set -e
|
|
|
|
# include helper functions
|
|
if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
|
|
. "/usr/share/koha/bin/koha-functions.sh"
|
|
else
|
|
echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
# Make sure the files we create are not accessible by anyone else.
|
|
umask 0077
|
|
|
|
usage()
|
|
{
|
|
local scriptname=$(basename $0)
|
|
|
|
cat <<EOF
|
|
$scriptname
|
|
|
|
This script dumps your Koha instance data for backup or migration.
|
|
|
|
The schema only option can be used to compare your existing database schema
|
|
to the expected Koha structure.
|
|
|
|
Usage:
|
|
$scriptname [--quiet|-q] [--exclude-indexes] instancename1 [instancename2...]
|
|
$scriptname -h|--help
|
|
|
|
--schema-only Dump only the database schema
|
|
--exclude-indexes Include Zebra indexes on the backup
|
|
--quiet|-q Make the script avoid printing to STDOUT
|
|
(useful for calling from another scripts)
|
|
--help|-h Display this help message
|
|
--without-db-name Do not include database name
|
|
|
|
EOF
|
|
}
|
|
|
|
dump_instance()
|
|
{
|
|
local name=$1
|
|
|
|
kohaconfig="/etc/koha/sites/$name/koha-conf.xml"
|
|
date="$(date +%Y-%m-%d)"
|
|
|
|
[ "$quiet" = "no" ] && echo "Dumping Koha site $name:"
|
|
|
|
# Dump database.
|
|
mysqlhost="$( xmlstarlet sel -t -v 'yazgfs/config/hostname' $kohaconfig )"
|
|
mysqldb="$( xmlstarlet sel -t -v 'yazgfs/config/database' $kohaconfig )"
|
|
mysqluser="$( xmlstarlet sel -t -v 'yazgfs/config/user' $kohaconfig )"
|
|
mysqlpass="$( xmlstarlet sel -t -v 'yazgfs/config/pass' $kohaconfig )"
|
|
backupdir="$( xmlstarlet sel -t -v 'yazgfs/config/backupdir' $kohaconfig || true )"
|
|
[ -z "$backupdir" ] && backupdir="/var/spool/koha/$name"
|
|
dbdump="$backupdir/$name-$date.sql.gz"
|
|
dbflag="--databases"
|
|
[ "$without_db_name" = "yes" ] && dbflag=""
|
|
if [ "$schema_only" = "yes" ]
|
|
then
|
|
schemadump="$backupdir/$name-schema-$date.sql"
|
|
[ "$quiet" = "no" ] && echo "* schema to $schemadump"
|
|
mysqldump $dbflag -d --host="$mysqlhost" \
|
|
--user="$mysqluser" --password="$mysqlpass" "$mysqldb" | sed --expression='s/ AUTO_INCREMENT=[0-9]\+//' > "$schemadump"
|
|
chown "root:$name-koha" "$schemadump"
|
|
chmod g+r "$schemadump"
|
|
else
|
|
[ "$quiet" = "no" ] && echo "* DB to $dbdump"
|
|
mysqldump $dbflag --host="$mysqlhost" \
|
|
--user="$mysqluser" --password="$mysqlpass" "$mysqldb" |
|
|
gzip > "$dbdump"
|
|
chown "root:$name-koha" "$dbdump"
|
|
chmod g+r "$dbdump"
|
|
|
|
instancefile="$name.conf"
|
|
|
|
# Dump configs, logs, etc.
|
|
metadump="$backupdir/$name-$date.tar.gz"
|
|
[ "$quiet" = "no" ] && echo "* configs, logs to $metadump"
|
|
|
|
if [ "$exclude_indexes" = "yes" ]; then
|
|
excludes="--exclude=var/lib/koha/$name/biblios \
|
|
--exclude=var/lib/koha/$name/authorities"
|
|
fi
|
|
|
|
tar -czf "$metadump" -C / $excludes \
|
|
"etc/koha/sites/$name" \
|
|
"etc/apache2/sites-available/$instancefile" \
|
|
"etc/apache2/sites-enabled/$instancefile" \
|
|
"var/lib/koha/$name" \
|
|
"var/log/koha/$name"
|
|
|
|
chown "root:$name-koha" "$metadump"
|
|
chmod g+r "$metadump"
|
|
|
|
[ "$quiet" = "no" ] && echo "Done."
|
|
|
|
fi
|
|
}
|
|
|
|
# Default values
|
|
quiet="no"
|
|
exclude_indexes="no"
|
|
without_db_name="no"
|
|
schema_only="no"
|
|
|
|
while [ $# -gt 0 ]; do
|
|
|
|
case "$1" in
|
|
--schema-only)
|
|
schema_only="yes"
|
|
shift ;;
|
|
--exclude-indexes)
|
|
exclude_indexes="yes"
|
|
shift ;;
|
|
--without-db-name)
|
|
without_db_name="yes"
|
|
shift ;;
|
|
-h|--help)
|
|
usage ; exit 0 ;;
|
|
-q|--quiet)
|
|
quiet="yes"
|
|
shift ;;
|
|
-*)
|
|
die "Error: invalid option switch ($1)" ;;
|
|
*)
|
|
# We expect the remaining stuff are the instance names
|
|
break ;;
|
|
esac
|
|
|
|
done
|
|
|
|
# Read instance names
|
|
if [ $# -gt 0 ]; then
|
|
# We have at least one instance name
|
|
for name in "$@"; do
|
|
|
|
if is_instance $name; then
|
|
|
|
dump_instance $name
|
|
|
|
else
|
|
if [ "$quiet" = "no" ]; then
|
|
die "Error: Invalid instance name $name"
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
done
|
|
else
|
|
if [ "$quiet" = "no" ]; then
|
|
die "Error: you must provide at least one instance name"
|
|
else
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
exit 0
|