3 # koha-dump: dump all contents and configs for a Koha site
4 # Copyright 2010 Catalyst IT, Ltd
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
22 # include helper functions
23 if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
24 . "/usr/share/koha/bin/koha-functions.sh"
26 echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
30 # Make sure the files we create are not accessible by anyone else.
35 local scriptname=$(basename $0)
40 This script dumps your Koha instance data for backup or migration.
42 The schema only option can be used to compare your existing database schema
43 to the expected Koha structure.
46 $scriptname [--quiet|-q] [--exclude-indexes] instancename1 [instancename2...]
49 --schema-only Dump only the database schema
50 --exclude-indexes Include Zebra indexes on the backup
51 --uploaded_files Include uploaded files.
52 --uploaded_temp_files Include temporary uploaded files.
53 --quiet|-q Make the script avoid printing to STDOUT
54 (useful for calling from another scripts)
55 --help|-h Display this help message
56 --without-db-name Do not include database name
65 kohaconfig="/etc/koha/sites/$name/koha-conf.xml"
66 date="$(date +%Y-%m-%d)"
68 [ "$quiet" = "no" ] && echo "Dumping Koha site $name:"
71 mysqlhost="$( xmlstarlet sel -t -v 'yazgfs/config/hostname' $kohaconfig )"
72 mysqldb="$( xmlstarlet sel -t -v 'yazgfs/config/database' $kohaconfig )"
73 mysqluser="$( xmlstarlet sel -t -v 'yazgfs/config/user' $kohaconfig )"
74 mysqlpass="$( xmlstarlet sel -t -v 'yazgfs/config/pass' $kohaconfig )"
75 backupdir="$( xmlstarlet sel -t -v 'yazgfs/config/backupdir' $kohaconfig || true )"
76 [ -z "$backupdir" ] && backupdir="/var/spool/koha/$name"
77 dbdump="$backupdir/$name-$date.sql.gz"
79 [ "$without_db_name" = "yes" ] && dbflag=""
80 if [ "$schema_only" = "yes" ]
82 schemadump="$backupdir/$name-schema-$date.sql"
83 [ "$quiet" = "no" ] && echo "* schema to $schemadump"
84 mysqldump $dbflag -d --host="$mysqlhost" --single-transaction \
85 --user="$mysqluser" --password="$mysqlpass" "$mysqldb" | sed --expression='s/ AUTO_INCREMENT=[0-9]\+//' > "$schemadump"
86 chown "root:$name-koha" "$schemadump"
87 chmod g+r "$schemadump"
89 [ "$quiet" = "no" ] && echo "* DB to $dbdump"
90 mysqldump $dbflag --host="$mysqlhost" --single-transaction \
91 --user="$mysqluser" --password="$mysqlpass" "$mysqldb" |
93 chown "root:$name-koha" "$dbdump"
96 instancefile="$name.conf"
98 # Dump configs, logs, etc.
99 metadump="$backupdir/$name-$date.tar.gz"
100 output="* configs, logs"
102 if [ "$exclude_indexes" = "yes" ]; then
103 excludes="--exclude=var/lib/koha/$name/biblios \
104 --exclude=var/lib/koha/$name/authorities"
107 if [ "$uploaded_files" = "yes" ]; then
109 uploaded_files_dir=$(echo $(get_upload_path $name) | cut -c 2-)
110 output="$output, uploaded files"
113 if [ "$uploaded_temp_files" = "yes" ]; then
115 tempdir=$(echo $(get_tmp_path $name) | cut -c 2-)
116 uploaded_temp_files_dir="$tempdir/koha_${name}_upload"
117 if ! [ -d /$uploaded_temp_files_dir ]; then
118 mkdir /$uploaded_temp_files_dir
120 output="$output, uploaded temporary files"
123 output="$output to $metadump"
124 [ "$quiet" = "no" ] && echo "$output"
126 tar -czf "$metadump" -C / $excludes \
127 "etc/koha/sites/$name" \
128 "etc/apache2/sites-available/$instancefile" \
129 "etc/apache2/sites-enabled/$instancefile" \
130 "var/lib/koha/$name" \
131 "var/log/koha/$name" \
132 $uploaded_files_dir \
133 $uploaded_temp_files_dir
135 chown "root:$name-koha" "$metadump"
136 chmod g+r "$metadump"
138 [ "$quiet" = "no" ] && echo "Done."
148 while [ $# -gt 0 ]; do
155 exclude_indexes="yes"
158 without_db_name="yes"
163 --uploaded_temp_files)
164 uploaded_temp_files="yes"
172 die "Error: invalid option switch ($1)" ;;
174 # We expect the remaining stuff are the instance names
180 # Read instance names
181 if [ $# -gt 0 ]; then
182 # We have at least one instance name
185 if is_instance $name; then
190 if [ "$quiet" = "no" ]; then
191 die "Error: Invalid instance name $name"
199 if [ "$quiet" = "no" ]; then
200 die "Error: you must provide at least one instance name"