]> arthur.barton.de Git - MkMySqlDump.git/blob - bin/mkmysqlslave
1804d8d83ef0241514f2f735d263202ee5920798
[MkMySqlDump.git] / bin / mkmysqlslave
1 #!/bin/sh
2 #
3 # mkmysqlslave -- import MySQL master data and start slave
4 # Copyright (c)2015-2016 Alexander Barton <alex@barton.de>
5 #
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.
11 #
12
13 NAME=$(basename "$0")
14
15 # Defaults
16 MYHOST="localhost"
17 MYUSER="root"
18 MYPW=""
19 INFILE=""
20
21 Help() {
22         echo "$NAME [<options> ...] <file>"
23         echo
24         echo "  --host|-h <host>"
25         echo "      MySQL server hostname [\"$MYHOST\"]."
26         echo "  --user|-u <user>"
27         echo "      MySQL server user [\"$MYUSER\"]."
28         echo "  --password|-p <password>"
29         echo "      MySQL server password [\"$MYPW\"]".
30         echo
31         echo "  <file>"
32         echo "      Path and name of SQL dump file."
33         echo
34 }
35
36 Usage() {
37         Help
38         exit 2
39 }
40
41 while [ $# -gt 0 ]; do
42         case "$1" in
43           "--host"|"-h")
44                 [ $# -ge 2 ] || Usage
45                 MYHOST="$2"
46                 shift 2
47                 ;;
48           "--user"|"-u")
49                 [ $# -ge 2 ] || Usage
50                 MYHOST="$2"
51                 shift 2
52                 ;;
53           "--password"|"-p")
54                 [ $# -ge 2 ] || Usage
55                 MYPW="$2"
56                 shift 2
57                 ;;
58           "--help")
59                 Help
60                 exit 0
61                 ;;
62           *)
63                 [ $# -eq 1 ] || Usage
64                 INFILE="$1"
65                 break
66         esac
67 done
68
69 if [ -z "$INFILE" ]; then
70         Usage
71 fi
72 if [ ! -r "$INFILE" -a "$INFILE" != "-" ]; then
73         echo "$NAME: Can't read \"$INFILE\"!"
74         exit 1
75 fi
76
77 echo "Initializing MySQL server on \"$MYHOST\" (user \"$MYUSER\") as replication slave:"
78
79 [ -n "$MYPW" ] && PWSWITCH="--password='$MYPW'" || PWSWITCH=""
80
81 echo "Stopping running slave threads ..."
82 mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH -e 'stop slave'; r=$?
83 if [ $r -ne 0 ]; then
84         echo "Warning: FAILED to stop MySQL slave threads, code $r!" >&2
85 fi
86
87 echo "Start: $(date)"
88 if [ "$INFILE" != "-" ]; then
89         echo "Importing \"$INFILE\" ..."
90 else
91         echo "Importing from standard input ..."
92 fi
93 ( echo "SET SESSION SQL_LOG_BIN=0;"; cat "$INFILE" ) \
94         | mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH; r=$?
95 echo "End: $(date)"
96 if [ $r -ne 0 ]; then
97         echo "MySQL import FAILED, code $r!" >&2
98         exit $r
99 fi
100
101 echo "Starting slave threads ..."
102 mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH -e 'start slave'; r=$?
103 if [ $r -ne 0 ]; then
104         echo "FAILED to start MySQL slave threads, code $r!" >&2
105         exit $r
106 fi
107
108 echo "MySQL slave initialized."
109 exit 0