]> arthur.barton.de Git - MkMySqlDump.git/blob - bin/mkmysqldump
Initial commit
[MkMySqlDump.git] / bin / mkmysqldump
1 #!/bin/sh
2 #
3 # mkmysqldump -- dump MySQL (master) data
4 # Copyright (c)2015 Alexander Barton <alex@barton.de>
5 #
6
7 NAME=$(basename "$0")
8
9 # Defaults
10 MYHOST="localhost"
11 MYUSER="root"
12 MYPW=""
13 OUTFILE="$(hostname -s)-$(date "+%Y%m%d-%H%M%S").sql"
14 STATS=""
15
16 Help() {
17         echo "$NAME [<options> ...]"
18         echo
19         echo "  --host|-h <host>"
20         echo "      MySQL server hostname [\"$MYHOST\"]."
21         echo "  --user|-u <user>"
22         echo "      MySQL server user [\"$MYUSER\"]."
23         echo "  --password|-p <password>"
24         echo "      MySQL server password [\"$MYPW\"]".
25         echo "  --outfile|-o <file>"
26         echo "      Path and name of SQL dump file [\"$OUTFILE\"]."
27         echo "  --summary|-s"
28         echo "      Display file and file system status summary."
29         echo
30 }
31
32 Usage() {
33         Help
34         exit 2
35 }
36
37 for cmd in mysql mysqldump; do
38         if ! which "$cmd" >/dev/null 2>&1; then
39                 echo "$NAME: \"$cmd\" command not found!"
40                 exit 1
41         fi
42 done
43
44 while [ $# -gt 0 ]; do
45         case "$1" in
46           "--host"|"-h")
47                 [ $# -ge 2 ] || Usage
48                 MYHOST="$2"
49                 shift 2
50                 ;;
51           "--user"|"-u")
52                 [ $# -ge 2 ] || Usage
53                 MYHOST="$2"
54                 shift 2
55                 ;;
56           "--password"|"-p")
57                 [ $# -ge 2 ] || Usage
58                 MYPW="$2"
59                 shift 2
60                 ;;
61           "--outfile"|"-o")
62                 [ $# -ge 2 ] || Usage
63                 OUTFILE="$2"
64                 shift 2
65                 ;;
66           "--summary"|"-s")
67                 STATS=1
68                 shift
69                 ;;
70           "--help")
71                 Help
72                 exit 0
73                 ;;
74           *)
75                 Usage
76         esac
77 done
78
79 echo "Dumping MySQL server on \"$MYHOST\" (user \"$MYUSER\"):"
80 umask 0077
81
82 [ -n "$MYPW" ] && PWSWITCH="--password='$MYPW'" || PWSWITCH=""
83
84 echo "Getting list of databases from server ..."
85 DATABASES=$(
86         mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH -e 'show databases' \
87          | grep "^\| " | cut -d' ' -f2 | grep -v "Database" \
88          | grep -v "information_schema" | grep -v "mysql"
89 )
90 if [ $? -ne 0 ]; then
91         echo "Failed to get list of databases! Aborting!"
92         exit 1
93 fi
94
95 echo "Dumping SQL data to file \"$OUTFILE\" ..."
96 CMD="mysqldump \
97         -h $MYHOST \
98         -u $MYUSER \
99         $PWSWITCH \
100         --single-transaction \
101         --databases $DATABASES"
102
103 echo "Start: $(date)"
104 echo $CMD
105 $CMD >"$OUTFILE"; r=$?
106 echo "End: $(date)"
107
108 [ $r -eq 0 ] \
109         && echo "Dump command exited with code 0, success." \
110         || echo "Dump command FAILED with code $r!" >&2
111
112 if [ -e "$OUTFILE" -a -n "$STATS" ]; then
113         echo
114         echo "SQL dump file"
115         ls -lh "$OUTFILE"
116         echo
117         df -h "$OUTFILE"
118         echo
119 fi
120
121 exit $r