Guest User

Untitled

a guest
Nov 5th, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.52 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. function print_setenv() {
  4. echo
  5. echo "必须先执行:"
  6. echo "----------------------------------------------"
  7. echo " source bin/setenv.sh"
  8. echo "或者:"
  9. echo " . bin/setenv.sh"
  10. echo
  11.  
  12. }
  13.  
  14. function print_help() {
  15. echo
  16. echo "初始化iCRM数据库工具:"
  17. echo "----------------------------------------------"
  18. echo " `basename $0` <options>"
  19. echo " -h help"
  20. echo " -q 快速模式,不导入商品数据"
  21. echo " -i 只初始化initdata,不初始化testdata"
  22. echo " -d [dbname] 指定数据库名"
  23. echo " -e 不检查环境变量,读取config/config.json文件"
  24. echo
  25.  
  26. }
  27.  
  28. trap 'exit 0;' INT
  29.  
  30. QUICK_MODE=0
  31. INIT_TEST=1
  32. NO_TEST_DIR=0
  33. ISENV=1
  34.  
  35. while getopts "d:ehqin:" arg
  36. do
  37. case $arg in
  38. q)
  39. QUICK_MODE=1
  40. ;;
  41. i)
  42. INIT_TEST=0
  43. ;;
  44. d)
  45. TARGET_CUSTOMER_DB=$OPTARG
  46. ;;
  47. e)
  48. ISENV=0
  49. ;;
  50. n)
  51. USEFUL_CUSTOMER=$OPTARG
  52. ;;
  53. ?)
  54. print_help
  55. exit 1
  56. ;;
  57. esac
  58. done
  59.  
  60. CONFIG_FILE=${ICRM_ROOT}/config/config.json
  61.  
  62. echo
  63. if [ $QUICK_MODE -eq 0 ]
  64. then
  65. echo "INIT DB IN FULL MODE"
  66. else
  67. echo "INIT DB IN QUICK MODE (WITHOUT GOODS)"
  68. fi
  69. echo
  70. echo
  71.  
  72. if [ $ISENV -eq 0 ]
  73. then
  74. ICRM_ROOT=`pwd`
  75. CONFIG_FILE=${ICRM_ROOT}/config/config.json
  76. # ICRM_DB_HOST=`cat ${CONFIG_FILE} |awk -F\" -vx="mysql" -vy="host" '$2==x&&/{/{k=1}/}/{k=0}k&&$2==y{print $(NF-1)}'`
  77. # ICRM_DB_USER=`cat ${CONFIG_FILE} |awk -F\" -vx="mysql" -vy="user" '$2==x&&/{/{k=1}/}/{k=0}k&&$2==y{print $(NF-1)}'`
  78. # ICRM_DB_PASSWORD=`cat ${CONFIG_FILE} |awk -F\" -vx="mysql" -vy="password" '$2==x&&/{/{k=1}/}/{k=0}k&&$2==y{print $(NF-1)}'`
  79.  
  80. ICRM_DB_HOST="cd"
  81. ICRM_DB_USER="root"
  82. ICRM_DB_PASSWORD="romens@2015"
  83.  
  84. ICRM_CLOUDDB=`cat ${CONFIG_FILE} | grep cloudDBName | awk -F "\"" '{print $4}'`
  85. ICRM_CUSTOMERDB_PREFIX=`cat ${CONFIG_FILE} | grep customerDBPrefix | awk -F "\"" '{print $4}'`
  86. else
  87. # 检查运行环境
  88. [ "$ICRM_ROOT" = "" ] && print_setenv && exit 1
  89. fi
  90.  
  91. if [ "${ICRM_DB_PASSWORD}" = "" ]
  92. then
  93. MYSQL="mysql -h ${ICRM_DB_HOST} -u ${ICRM_DB_USER}"
  94. else
  95. MYSQL="mysql -h ${ICRM_DB_HOST} -u ${ICRM_DB_USER} -p${ICRM_DB_PASSWORD}"
  96. fi
  97.  
  98. # 如果没有指定customerDB,则使用romens作为默认customer数据库
  99. ICRM_CUSTOMERDB="${ICRM_CUSTOMERDB_PREFIX}_localhost"
  100. if [ "$1" != "" ]
  101. then
  102. SUFFIX=`echo $1 | sed 's/\./_/g'`
  103. ICRM_CUSTOMERDB="${ICRM_CUSTOMERDB_PREFIX}_${SUFFIX}"
  104. fi
  105.  
  106. DB_ROOT=${ICRM_ROOT}/db/ddl
  107. RESULT=/tmp/$$.err
  108.  
  109. function rebuildDB() {
  110. dbName=$1
  111. ${MYSQL} 2>/dev/null << EOF!
  112. DROP DATABASE IF EXISTS ${dbName};
  113. CREATE DATABASE IF NOT EXISTS ${dbName} DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  114. EOF!
  115. }
  116.  
  117. function delDB() {
  118. userDB=`echo "show databases;" | ${MYSQL} 2>/dev/null`
  119. for i in ${userDB}
  120. do
  121. len1=`echo $i | grep ${ICRM_CUSTOMERDB_PREFIX} | awk -F "_" '{print length($3)}'`
  122. if [ "$len1" == "32" ]
  123. then
  124. echo "Drop database $i"
  125. ${MYSQL} 2>/dev/null << EOF!
  126. DROP DATABASE IF EXISTS ${i};
  127. EOF!
  128. fi
  129. done
  130. }
  131.  
  132. function makeDB() {
  133. dbName=$1
  134. sqlRoot=$2
  135. quickMode=$3
  136. noTestDataSql=$4
  137.  
  138. SQL=`find ${sqlRoot} -name "*sql" | sort`
  139. echo "Initializing Database: ${dbName} ..."
  140. for sql in ${SQL}
  141. do
  142. echo $sql | grep "testDataGoods" > /dev/null 2>&1
  143. noGoods=$?
  144. echo $sql | grep "testData.sql" > /dev/null 2>&1
  145. noTestDataDir=$?
  146. if [[ ${quickMode} -eq 1 && $noGoods -eq 0 ]]
  147. then
  148. echo "QUICK MODE, skipping $sql"
  149. elif [[ ${noTestDataSql} -eq 0 && $noTestDataDir -eq 0 ]]
  150. then
  151. echo "Skip $sql"
  152. else
  153. echo "Executing `basename ${sql}` ..."
  154. cat ${sql} | ${MYSQL} ${dbName} > ${RESULT} 2>&1
  155. [ $? -ne 0 ] && echo "FAILED!" && cat ${RESULT} | grep -v "^Warning: Using a password.*$" && exit 1
  156. fi
  157.  
  158.  
  159. done
  160.  
  161. echo "Database <${dbName}> is sucessfully created!"
  162. echo "---------------------------------------------------------"
  163. echo
  164. return 0
  165. }
  166.  
  167. function loadEnterprise() {
  168. cloudDBName=$1
  169. echo "SELECT customerDBSuffix FROM Customer WHERE enabled = true;" | ${MYSQL} ${ICRM_CLOUDDB} 2>/dev/null
  170. }
  171.  
  172. if [ "${TARGET_CUSTOMER_DB}" = "" ]
  173. then
  174. echo ${ICRM_CLOUDDB}
  175. rebuildDB ${ICRM_CLOUDDB}
  176. makeDB ${ICRM_CLOUDDB} ${DB_ROOT}/cloudDB ${QUICK_MODE} ${INIT_TEST}
  177. fi
  178. if [ "${USEFUL_CUSTOMER}" = "" ]
  179. then
  180. echo ""
  181. else
  182. echo "UPDATE Customer set erpIsAvailable = false WHERE customerDBSuffix != '${USEFUL_CUSTOMER}'" | ${MYSQL} ${ICRM_CLOUDDB}
  183. fi
  184.  
  185. data=`loadEnterprise ${ICRM_CLOUDDB}`
  186.  
  187. echo "Found Enterprises ..."
  188. echo ${data}
  189. echo
  190. echo "Delete user databases"
  191. delDB
  192.  
  193. if [ "$TARGET_CUSTOMER_DB" = "" ]
  194. then
  195. echo "Initiating all the databases"
  196. else
  197. echo "Initiating $TARGET_CUSTOMER_DB ONLY"
  198. fi
  199.  
  200. i=0
  201. for x in ${data}
  202. do
  203. if [ ${i} -eq 0 ]
  204. then
  205. i=1
  206. type=${x}
  207. else
  208. xDB="${ICRM_CUSTOMERDB_PREFIX}_${x}"
  209. if [ "${TARGET_CUSTOMER_DB}" == "" -o "${xDB}" == "${TARGET_CUSTOMER_DB}" ]
  210. then
  211. i=1
  212. name=${xDB}
  213. rebuildDB ${name}
  214. makeDB ${name} ${DB_ROOT}/customerDB ${QUICK_MODE} ${INIT_TEST}
  215. else
  216. i=1
  217. name=${TARGET_CUSTOMER_DB}
  218. rebuildDB ${name}
  219. makeDB ${name} ${DB_ROOT}/customerDB ${QUICK_MODE} ${INIT_TEST}
  220. exit 2
  221. fi
  222. fi
  223. done
Add Comment
Please, Sign In to add comment