3 # mkmysqldump -- dump MySQL (master) data
4 # Copyright (c)2015-2017 Alexander Barton <alex@barton.de>
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.
10 # Please read the file COPYING, README and AUTHORS for more information.
19 OUTFILE="$(hostname -s)-$(date "+%Y%m%d-%H%M%S").sql"
24 echo "$NAME [<options> ...]"
26 echo " --host|-h <host>"
27 echo " MySQL server hostname [\"$MYHOST\"]."
28 echo " --user|-u <user>"
29 echo " MySQL server user [\"$MYUSER\"]."
30 echo " --password|-p <password>"
31 echo " MySQL server password [\"$MYPW\"]".
32 echo " --outfile|-o <file>"
33 echo " Path and name of SQL dump file [\"$OUTFILE\"]."
34 echo " --outdir|-d <directory>"
35 echo " Directory for automatically named dump files."
37 echo " Display file and file system status summary."
39 echo " Compress SQL dump file using gzip(1)"
41 echo " Compress SQL dump file using bzip2(1)"
43 echo " Compress SQL dump file using xz(1)"
54 echo "-----> THERE HAVE BEEN ERRORS! <-----"
58 for cmd in mysql mysqldump; do
59 if ! which "$cmd" >/dev/null 2>&1; then
60 echo "$NAME: \"$cmd\" command not found!"
65 while [ $# -gt 0 ]; do
89 OUTFILE="$2/$(hostname -s)-$(date "+%Y%m%d-%H%M%S").sql"
117 echo "Dumping MySQL server on \"$MYHOST\" (user \"$MYUSER\"):"
119 echo "Started: $(date)"
123 [ -n "$MYPW" ] && PWSWITCH="--password=$MYPW" || PWSWITCH=""
125 echo "Getting list of databases from server ..."
127 mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH -e 'show databases' \
128 | grep "^\| " | cut -d' ' -f2 | grep -v "Database" \
129 | grep -v "information_schema" \
130 | grep -v "performance_schema" \
133 if [ $? -ne 0 ]; then
134 echo "Failed to get list of databases! Aborting!"
139 echo "Checking slave status ..."
140 Slave_IO_Running=""; Slave_SQL_Running=""
141 eval "$(echo 'SHOW SLAVE STATUS\G' | mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH | sed -n '/Running/p' | sed 's/: /=/g')"
142 if [ -n "$Slave_IO_Running" -o -n "$Slave_SQL_Running" ]; then
143 if [ "$Slave_IO_Running" = "Yes" -a "$Slave_SQL_Running" = "Yes" ]; then
144 echo "Server is running as MySQL slave, replication is Ok."
146 echo "Server is running as MySQL slave, but replication FAILED!"
151 echo "Server is not running as MySQL slave. Ok."
154 echo "Will dump the following databases:"
155 for d in $DATABASES; do
159 echo "Dumping SQL data to file \"$OUTFILE\" ..."
160 echo "Beginning dump: $(date)"
166 --databases $DATABASES"
167 $CMD >"$OUTFILE"; r=$?
168 if [ -n "$COMPRESS" -a -s "$OUTFILE" -a $r -eq 0 ]; then
169 echo "Dump done: $(date)"
170 echo "Compressing dump file ($COMPRESS) ..."
171 $COMPRESS "$OUTFILE" 2>&1
172 [ $? -eq 0 ] || echo "Error compressing dump file!" >&2
177 if [ -n "$STATS" ]; then
179 for f in "$OUTFILE"*; do
183 df -h "$(dirname "$OUTFILE")"
187 if [ $r -eq 0 ]; then
188 echo "Dump command exited with code 0, success."
191 echo "Dump command FAILED with code $r!" >&2