github.com/letsencrypt/trillian@v1.1.2-0.20180615153820-ae375a99d36a/scripts/resetdb.sh (about) 1 #!/bin/bash 2 3 set -e 4 5 usage() { 6 echo "$0 [--force] [--verbose] ..." 7 echo "accepts environment variables:" 8 echo " - DB_NAME" 9 echo " - DB_USER" 10 echo " - DB_PASSWORD" 11 echo " - DB_HOST" 12 echo " - DB_PORT" 13 } 14 15 collect_vars() { 16 # set unset environment variables to defaults 17 [ -z ${DB_USER+x} ] && DB_USER="root" 18 [ -z ${DB_NAME+x} ] && DB_NAME="test" 19 [ -z ${DB_HOST+x} ] && DB_HOST="localhost" 20 [ -z ${DB_PORT+x} ] && DB_PORT="3306" 21 FLAGS=() 22 23 # handle flags 24 FORCE=false 25 VERBOSE=false 26 while [[ $# -gt 0 ]]; do 27 case "$1" in 28 --force) FORCE=true ;; 29 --verbose) VERBOSE=true ;; 30 *) FLAGS+=("$1") 31 esac 32 shift 1 33 done 34 35 FLAGS+=(-u "${DB_USER}") 36 FLAGS+=(--host "${DB_HOST}") 37 FLAGS+=(--port "${DB_PORT}") 38 39 # Optionally print flags (before appending password) 40 [[ ${VERBOSE} = 'true' ]] && echo "- Using MySQL Flags: ${FLAGS[@]}" 41 42 # append password if supplied 43 [ -z ${DB_PASSWORD+x} ] || FLAGS+=(-p"${DB_PASSWORD}") 44 } 45 46 main() { 47 collect_vars "$@" 48 49 readonly TRILLIAN_PATH=$(go list -f '{{.Dir}}' github.com/google/trillian) 50 51 # what we're about to do 52 echo "Warning: about to destroy and reset database '${DB_NAME}'" 53 54 [[ ${FORCE} = true ]] || read -p "Are you sure? [Y/N]: " -n 1 -r 55 echo # Print newline following the above prompt 56 57 if [ -z ${REPLY+x} ] || [[ $REPLY =~ ^[Yy]$ ]] 58 then 59 echo "Resetting DB..." 60 mysql "${FLAGS[@]}" -e "DROP DATABASE IF EXISTS ${DB_NAME};" 61 mysql "${FLAGS[@]}" -e "CREATE DATABASE ${DB_NAME};" 62 mysql "${FLAGS[@]}" -e "GRANT ALL ON ${DB_NAME}.* TO '${DB_NAME}' IDENTIFIED BY 'zaphod';" 63 mysql "${FLAGS[@]}" -D ${DB_NAME} < ${TRILLIAN_PATH}/storage/mysql/storage.sql 64 echo "Reset Complete" 65 fi 66 } 67 68 main "$@"