#!/bin/sh # # mkmysqlslave -- import MySQL master data and start slave # Copyright (c)2015-2016 Alexander Barton # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # Please read the file COPYING, README and AUTHORS for more information. # NAME=$(basename "$0") # Defaults MYHOST="localhost" MYUSER="root" MYPW="" INFILE="" Help() { echo "$NAME [ ...] " echo echo " --host|-h " echo " MySQL server hostname [\"$MYHOST\"]." echo " --user|-u " echo " MySQL server user [\"$MYUSER\"]." echo " --password|-p " echo " MySQL server password [\"$MYPW\"]". echo echo " " echo " Path and name of SQL dump file." echo } Usage() { Help exit 2 } while [ $# -gt 0 ]; do case "$1" in "--host"|"-h") [ $# -ge 2 ] || Usage MYHOST="$2" shift 2 ;; "--user"|"-u") [ $# -ge 2 ] || Usage MYHOST="$2" shift 2 ;; "--password"|"-p") [ $# -ge 2 ] || Usage MYPW="$2" shift 2 ;; "--help") Help exit 0 ;; *) [ $# -eq 1 ] || Usage INFILE="$1" break esac done if [ -z "$INFILE" ]; then Usage fi if [ ! -r "$INFILE" -a "$INFILE" != "-" ]; then echo "$NAME: Can't read \"$INFILE\"!" exit 1 fi echo "Initializing MySQL server on \"$MYHOST\" (user \"$MYUSER\") as replication slave:" [ -n "$MYPW" ] && PWSWITCH="--password=$MYPW" || PWSWITCH="" echo "Stopping running slave threads ..." mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH -e 'stop slave'; r=$? if [ $r -ne 0 ]; then echo "Warning: FAILED to stop MySQL slave threads, code $r!" >&2 fi echo "Start: $(date)" if [ "$INFILE" != "-" ]; then echo "Importing \"$INFILE\" ..." else echo "Importing from standard input ..." fi ( echo "SET SESSION SQL_LOG_BIN=0;"; cat "$INFILE" ) \ | mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH; r=$? echo "End: $(date)" if [ $r -ne 0 ]; then echo "MySQL import FAILED, code $r!" >&2 exit $r fi echo "Starting slave threads ..." mysql -h "$MYHOST" -u "$MYUSER" $PWSWITCH -e 'start slave'; r=$? if [ $r -ne 0 ]; then echo "FAILED to start MySQL slave threads, code $r!" >&2 exit $r fi echo "MySQL slave initialized." exit 0