]> arthur.barton.de Git - MkMySqlDump.git/blob - bin/mkmysqldump
Use --lock-all-tables, --single-transaction only works with InnoDB
[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 "  --outdir|-d <directory>"
28         echo "      Directory for automatically named dump files."
29         echo "  --summary|-s"
30         echo "      Display file and file system status summary."
31         echo
32 }
33
34 Usage() {
35         Help
36         exit 2
37 }
38
39 for cmd in mysql mysqldump; do
40         if ! which "$cmd" >/dev/null 2>&1; then
41                 echo "$NAME: \"$cmd\" command not found!"
42                 exit 1
43         fi
44 done
45
46 while [ $# -gt 0 ]; do
47         case "$1" in
48           "--host"|"-h")
49                 [ $# -ge 2 ] || Usage
50                 MYHOST="$2"
51                 shift 2
52                 ;;
53           "--user"|"-u")
54                 [ $# -ge 2 ] || Usage
55                 MYHOST="$2"
56                 shift 2
57                 ;;
58           "--password"|"-p")
59                 [ $# -ge 2 ] || Usage
60                 MYPW="$2"
61                 shift 2
62                 ;;
63           "--outfile"|"-o")
64                 [ $# -ge 2 ] || Usage
65                 OUTFILE="$2"
66                 shift 2
67                 ;;
68           "--outdir"|"-d")
69                 [ $# -ge 2 ] || Usage
70                 OUTFILE="$2/$(hostname -s)-$(date "+%Y%m%d-%H%M%S").sql"
71                 shift 2
72                 ;;
73           "--summary"|"-s")
74                 STATS=1
75                 shift
76                 ;;
77           "--help")
78                 Help
79                 exit 0
80                 ;;
81           *)
82                 Usage
83         esac
84 done
85
86 echo "Dumping MySQL server on \"$MYHOST\" (user \"$MYUSER\"):"
87 umask 0077
88
89 [ -n "$MYPW" ] && PWSWITCH="--password='$MYPW'" || PWSWITCH=""
90
91 echo "Getting list of databases from server ..."
92 DATABASES=$(
93         mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH -e 'show databases' \
94          | grep "^\| " | cut -d' ' -f2 | grep -v "Database" \
95          | grep -v "information_schema" \
96          | grep -v "performance_schema" \
97          | grep -v "mysql"
98 )
99 if [ $? -ne 0 ]; then
100         echo "Failed to get list of databases! Aborting!"
101         exit 1
102 fi
103
104 echo "Dumping SQL data to file \"$OUTFILE\" ..."
105 CMD="mysqldump \
106         -h $MYHOST \
107         -u $MYUSER \
108         $PWSWITCH \
109         --lock-all-tables \
110         --databases $DATABASES"
111
112 echo "Start: $(date)"
113 echo $CMD
114 $CMD >"$OUTFILE"; r=$?
115 echo "End: $(date)"
116
117 [ $r -eq 0 ] \
118         && echo "Dump command exited with code 0, success." \
119         || echo "Dump command FAILED with code $r!" >&2
120
121 if [ -e "$OUTFILE" -a -n "$STATS" ]; then
122         echo
123         echo "SQL dump file"
124         ls -lh "$OUTFILE"
125         echo
126         df -h "$OUTFILE"
127         echo
128 fi
129
130 exit $r