1010# option i: disable interactive mode
1111# option a: source a bash script (e.g. to override multiple variables at once)
1212# option s: evaluate associated argument (e.g. to override a value)
13+ # option f: force re-do all actions
14+ # option q: enable SQL debugging
1315
1416# defaults assume this script is executed on infoLoggerServer host
1517# and that DB runs on same node (local connection to db)
@@ -19,6 +21,12 @@ SQL_ROOT_USER=root
1921SQL_ROOT_PWD=" "
2022SQL_ROOT_HOST=localhost
2123
24+ # if set, force all actions even if they seem not necessary
25+ FORCE_REDO=0
26+
27+ # if set, SQL queries & output printed
28+ SQL_DEBUG=0
29+
2230# where are we running now
2331HERE=` hostname -f`
2432
@@ -77,7 +85,7 @@ MYSQL_EXE=mysql
7785
7886
7987# parse command line arguments
80- while getopts " ia:s:" option
88+ while getopts " ia:s:fq " option
8189do
8290 case $option in
8391 i)
100108 s)
101109 eval $OPTARG
102110 ;;
111+ f)
112+ echo " Force redo all actions"
113+ FORCE_REDO=1
114+ ;;
115+ q)
116+ echo " SQL debugging enabled"
117+ SQL_DEBUG=1
118+ ;;
103119 esac
104120done
105121
122+
106123if [ " $IS_INTERACTIVE " -eq " 1" ]; then
107124 # begin interactive part
108125
@@ -169,31 +186,73 @@ if [ "$?" != "0" ]; then
169186 exit 1
170187fi
171188
189+ # function to execute SQL command
190+ # arg1: SQL command
191+ # arg2: database name, if any
192+ function mysqlExecute {
193+ if [ " $SQL_DEBUG " -eq " 1" ]; then
194+ echo " SQL : $1 "
195+ fi
196+ SQLRES=` $MYSQL_EXE -h $SQL_ROOT_HOST -u $SQL_ROOT_USER $SQL_PWD_ARG -B -N -e " $1 " $2 2>&1 `
197+ RET=$?
198+ if [ " $SQL_DEBUG " -eq " 1" ]; then
199+ if [ " $SQLRES " != " " ]; then
200+ echo " $SQLRES "
201+ fi
202+ fi
203+ return $RET
204+ }
205+
172206echo " Setting up mysql for infoLogger"
173207
208+ CHANGES=0
209+
174210# Create database
175- $MYSQL_EXE -h $SQL_ROOT_HOST -u $SQL_ROOT_USER $SQL_PWD_ARG -e " create database $INFOLOGGER_DB_NAME " 2> /dev/null
176- echo " MySQL database $INFOLOGGER_DB_NAME created"
211+ mysqlExecute " quit"
212+ if [ " $? " != " 0" ] || [ " $FORCE_REDO " -eq 1 ]; then
213+ echo " Create database $INFOLOGGER_DB_NAME "
214+ mysqlExecute " create database $INFOLOGGER_DB_NAME "
215+ if [ " $? " != " 0" ] && [ " $FORCE_REDO " -eq 0 ]; then
216+ exit
217+ fi
218+ CHANGES=1
219+ else
220+ echo " Database $INFOLOGGER_DB_NAME already exists, skipping database create"
221+ fi
222+
177223
178224# for mysql8
179225# PWDOPT="with mysql_native_password"
180226
181227# Create accounts SQL command
182228MYSQL_COMMANDS=" "
229+
183230for CONFIG in " ${EXTRA_CONFIG[@]} " ; do
231+ # check if we can already connect
232+ mysql -u " ${EXTRA_USER[$CONFIG]} " -p" ${EXTRA_PWD[$CONFIG]} " -B -N -e " quit" $INFOLOGGER_DB_NAME > /dev/null 2>&1
233+ # mysqlExecute "select current_user()"
234+
235+ if [ " $? " == " 0" ] && [ " $FORCE_REDO " -eq 0 ]; then
236+ echo " Can already connect as ${EXTRA_USER[$CONFIG]} , skipping user create"
237+ continue
238+ else
239+ CHANGES=1
240+ fi
241+
184242 for QHOST in " %" " localhost" " ${HERE} " ; do
185- MYSQL_COMMAND=` echo " create user \" ${EXTRA_USER[$CONFIG]} \" @\" ${QHOST} \" identified ${PWDOPT} by \" ${EXTRA_PWD[$CONFIG]} \" ;" `
186- MYSQL_COMMANDS=${MYSQL_COMMANDS} $' \n ' ${MYSQL_COMMAND}
187- echo " $MYSQL_COMMAND "
188- MYSQL_COMMAND=` echo " grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_DB_NAME .* to \" ${EXTRA_USER[$CONFIG]} \" @\" ${QHOST} \" ;" `
189- MYSQL_COMMANDS=${MYSQL_COMMANDS} $' \n ' ${MYSQL_COMMAND}
190- echo " $MYSQL_COMMAND "
243+ mysqlExecute " drop user \" ${EXTRA_USER[$CONFIG]} \" @\" ${QHOST} \" ;"
244+ mysqlExecute " create user \" ${EXTRA_USER[$CONFIG]} \" @\" ${QHOST} \" ;"
245+ mysqlExecute " set password for \" ${EXTRA_USER[$CONFIG]} \" @\" ${QHOST} \" = PASSWORD(\" ${EXTRA_PWD[$CONFIG]} \" );"
246+ mysqlExecute " grant ${EXTRA_PRIVILEGE[$CONFIG]} on $INFOLOGGER_DB_NAME .* to \" ${EXTRA_USER[$CONFIG]} \" @\" ${QHOST} \" ;"
191247 done
192248done
193249
194- $MYSQL_EXE -h $SQL_ROOT_HOST -u $SQL_ROOT_USER $SQL_PWD_ARG -e " $MYSQL_COMMANDS "
195250echo " MySQL infoLogger accounts created"
196251
252+ if [ " $CHANGES " == " 0" ]; then
253+ echo " No changes"
254+ fi
255+
197256# generate a sample configuration
198257INFOLOGGER_SAMPLE_CONFIG=" # infoLogger configuration file" $' \n ' $' \n '
199258for CONFIG in " ${EXTRA_CONFIG[@]} " ; do
0 commit comments