You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

пре 6 година
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. #!/bin/bash
  2. Script_SRC_BAK=ED8backup-mysql-Auto.sh.SRC
  3. Script_TMP_BAK=ED8backup-mysql-Auto.sh.TMP
  4. Script_REAL_BAK=ED8backup-mysql-Auto.sh
  5. Script_SRC_Restore=ED8restore_from_local-mysql.sh.SRC
  6. Script_TMP_Restore=ED8restore_from_local-mysql.sh.TMP
  7. Script_REAL_Restore=ED8restore_from_local-mysql.sh
  8. USER=`whoami`
  9. PWFile="/home/$USER/PW/mysql_ED8.info"
  10. WORK_Folder="/ED/ED8/Script_ED8"
  11. SOUCE_Folder="/ED/ED8/Source_Files"
  12. Bak_Folder="/ED/ED8/Backup_file"
  13. UTY_1=expect
  14. UTY_2=lsscsi
  15. UTY_3=gunzip
  16. UTY_4=mysql
  17. UTY_5=mysqldump
  18. CHK_QTY=9
  19. cp $Script_SRC_BAK $Script_TMP_BAK
  20. cp $Script_SRC_Restore $Script_TMP_Restore
  21. echo -e -n "You are \033[44;37m$USER\033[0m. Is it correct? (y|n) "
  22. read yn
  23. if [[ $yn == y ]]; then
  24. echo -e "Change necessary files owner to $USER"
  25. sudo chown $USER:$USER /ED/ED8 -R
  26. elif [[ $yn == n ]]; then
  27. echo "\033[31mYour input is $yn. Exit. "
  28. echo
  29. exit
  30. else
  31. echo -e "\033[41;37mWrong input ($yn). Exit. \033[0m"
  32. echo
  33. exit
  34. fi
  35. echo
  36. echo -e "\033[32mCheck list: \033[0m"
  37. echo -e " \033[33m01. Password file \t\t= $PWFile\033[0m"
  38. echo -e " \033[33m02. Work Folder \t\t= $WORK_Folder\033[0m"
  39. echo -e " \033[33m03. Source files folder \t= $SOUCE_Folder\033[0m"
  40. echo -e " \033[33m04. Local Backup Folder \t= $Bak_Folder\033[0m"
  41. echo -e " \033[33m05. Utility status \t\t= $UTY_1\033[0m"
  42. echo -e " \033[33m06. Utility status \t\t= $UTY_2\033[0m"
  43. echo -e " \033[33m07. Utility status \t\t= $UTY_3\033[0m"
  44. echo -e " \033[33m08. Utility status \t\t= $UTY_4\033[0m"
  45. echo -e " \033[33m09. Utility status \t\t= $UTY_5\033[0m"
  46. echo
  47. echo
  48. i=0
  49. ##### Func
  50. SEL_BAK_Mode (){
  51. echo -e "\033[33mPlease select which backup mode do you want to use? \033[0m"
  52. echo -e " \033[32mA: OS_HDD only \t\t\t(You only have one Storage in host) \033[0m"
  53. echo -e " \033[32mB: OS_HDD + BAK_Disk_A\t\t(You have two Storages installed in host at least) \033[0m"
  54. echo -e " \033[32mC: OS_HDD + BAK_Disk_A + BAK_Disk_B\t(You have three Storages installed in host at least) \033[0m"
  55. echo
  56. echo -e -n "\033[33mPlease input: (A|B|C) \033[0m"
  57. read MODE
  58. if [[ $MODE == "A" ]]; then
  59. echo -e " Your input is (A): OS_HDD only"
  60. elif [[ $MODE == "B" ]]; then
  61. echo -e " Your input is (B): OS_HDD + BAK_Disk_A - You have two Storages installed in host at least"
  62. QTY_Storage=`lsscsi | awk '{print $2}' | grep "disk" |wc -l`
  63. if [[ $QTY_Storage < 2 ]]; then
  64. echo -e " \033[41;37m>> You don't have enough Storages ($QTY_Storage) to do this. Exit \033[0m"
  65. echo
  66. lsscsi
  67. echo
  68. exit
  69. fi
  70. lsscsi
  71. echo
  72. echo -e -n "\033[33mAbove are all installed storages, which one is your BAK_Disk_A? (sda|sdb|sdc|sdx) \033[0m"
  73. read STORAGE_A
  74. lsscsi | grep $STORAGE_A > /dev/null 2>&1
  75. if [[ $? != 0 ]]; then
  76. echo -e " \033[41;37mThere is no storage named /dev/$STORAGE_A in list. Exit \033[0m"
  77. echo
  78. exit
  79. fi
  80. sed -i "s/BAK_Disk_A=\/dev\/sdb/BAK_Disk_A=\/dev\/$STORAGE_A/g" $Script_TMP_BAK
  81. sed -i 's/#CHK_BAK_Disk_A/CHK_BAK_Disk_A/g' $Script_TMP
  82. sed -i 's/#CHK_BAK_Disk_A_Mount_Point/CHK_BAK_Disk_A_Mount_Point/g' $Script_TMP_BAK
  83. sed -i 's/#CHK_BAK_Disk_A_Mount_Status/CHK_BAK_Disk_A_Mount_Status/g' $Script_TMP_BAK
  84. sed -i 's/#CHK_BAK_Disk_A_Hostname_Folder/CHK_BAK_Disk_A_Hostname_Folder/g' $Script_TMP_BAK
  85. sed -i 's/#CHK_BAK_Disk_A_ED8_BAK_Folder/CHK_BAK_Disk_A_ED8_BAK_Folder/g' $Script_TMP_BAK
  86. sed -i 's/#CP_TO_BAK_Disk_A/CP_TO_BAK_Disk_A/g' $Script_TMP_BAK
  87. echo -e " >> Set it done. "
  88. echo
  89. elif [[ $MODE == "C" ]]; then
  90. echo -e " Your input is (C): OS_HDD + BAK_Disk_A + BAK_Disk_B - You have three Storages installed in host at least"
  91. QTY_Storage=`lsscsi | awk '{print $2}' | grep "disk" | wc -l`
  92. if [[ $QTY_Storage < 3 ]]; then
  93. echo -e " \033[41;37m>> You don't have enough Storages ($QTY_Storage) to do this. Exit \033[0m"
  94. echo
  95. lsscsi
  96. echo
  97. exit
  98. fi
  99. lsscsi
  100. echo
  101. echo -e -n "\033[33mAbove are all installed storages, which one is your BAK_Disk_A? (sda|sdb|sdc|sdx) \033[0m"
  102. read STORAGE_A
  103. lsscsi | grep $STORAGE_A > /dev/null 2>&1
  104. if [[ $? != 0 ]]; then
  105. echo -e " \033[41;37mThere is no storage named /dev/$STORAGE_A in list. Exit \033[0m"
  106. echo
  107. exit
  108. fi
  109. sed -i "s/BAK_Disk_A=\/dev\/sdb/BAK_Disk_A=\/dev\/$STORAGE_A/g" $Script_TMP_BAK
  110. sed -i 's/#CHK_BAK_Disk_A/CHK_BAK_Disk_A/g' $Script_TMP_BAK
  111. sed -i 's/#CHK_BAK_Disk_A_Mount_Point/CHK_BAK_Disk_A_Mount_Point/g' $Script_TMP_BAK
  112. sed -i 's/#CHK_BAK_Disk_A_Mount_Status/CHK_BAK_Disk_A_Mount_Status/g' $Script_TMP_BAK
  113. sed -i 's/#CHK_BAK_Disk_A_Hostname_Folder/CHK_BAK_Disk_A_Hostname_Folder/g' $Script_TMP_BAK
  114. sed -i 's/#CHK_BAK_Disk_A_ED8_BAK_Folder/CHK_BAK_Disk_A_ED8_BAK_Folder/g' $Script_TMP_BAK
  115. sed -i 's/#CP_TO_BAK_Disk_A/CP_TO_BAK_Disk_A/g' $Script_TMP_BAK
  116. echo -e " >> Set it done. "
  117. echo
  118. echo -e -n "\033[33mWhich one is your BAK_Disk_B? (sda|sdb|sdc|sdx) \033[0m"
  119. read STORAGE_B
  120. if [[ $STORAGE_A == $STORAGE_B ]]; then
  121. echo -e "\033[41;37mYour BAK_Disk_A($STORAGE_A) and BAK_Disk_A($STORAGE_A) are the same. Wrong inout. Exit \033[0m"
  122. echo
  123. exit
  124. fi
  125. lsscsi | grep $STORAGE_B > /dev/null 2>&1
  126. if [[ $? != 0 ]]; then
  127. echo -e " \033[41;37mThere is no storage named /dev/$STORAGE_B in list. Exit \033[0m"
  128. echo
  129. exit
  130. fi
  131. sed -i "s/BAK_Disk_B=\/dev\/sda/BAK_Disk_B=\/dev\/$STORAGE_B/g" $Script_TMP_BAK
  132. sed -i 's/#CHK_BAK_Disk_B/CHK_BAK_Disk_B/g' $Script_TMP_BAK
  133. sed -i 's/#CHK_BAK_Disk_B_Mount_Point/CHK_BAK_Disk_B_Mount_Point/g' $Script_TMP_BAK
  134. sed -i 's/#CHK_BAK_Disk_B_Mount_Status/CHK_BAK_Disk_B_Mount_Status/g' $Script_TMP_BAK
  135. sed -i 's/#CHK_BAK_Disk_B_Hostname_Folder/CHK_BAK_Disk_B_Hostname_Folder/g' $Script_TMP_BAK
  136. sed -i 's/#CHK_BAK_Disk_B_ED8_BAK_Folder/CHK_BAK_Disk_B_ED8_BAK_Folder/g' $Script_TMP_BAK
  137. sed -i 's/#CP_TO_BAK_Disk_B/CP_TO_BAK_Disk_B/g' $Script_TMP_BAK
  138. echo -e " >> Set it done. "
  139. echo
  140. else
  141. echo -e " \033[41;37mWrong input ($MODE). Exit \033[0m"
  142. echo
  143. exit
  144. fi
  145. }
  146. CHK_PWFile (){
  147. ls $PWFile > /dev/null 2>&1
  148. if [[ $? != 0 ]]; then
  149. echo -e " \033[31m01. Fail. $PWFile doesn't exist. Please create one. Exit \033[0m"
  150. echo
  151. echo -e "$PWFile Content example: "
  152. echo -e "Database_Name: db_ed8_"
  153. echo -e "ID: root"
  154. echo -e "Password: +039*******"
  155. echo
  156. exit
  157. else
  158. echo -e " \033[34m01. Pass. $PWFile exist. \033[0m"
  159. DATABASEName="`cat $PWFile | grep Database_Name: | awk '{print $NF}'`"
  160. DATABASEUser="`cat $PWFile | grep ID: | awk '{print $NF}'`"
  161. DATABASEPassword="`cat $PWFile | grep Password: | awk '{print $NF}'`"
  162. echo -e -n " >> 01-1. Check context information accuracy (DATABASEName)\t\t: "
  163. if [[ $DATABASEName == "" ]]; then
  164. echo -e "\033[31mFail. There is no correct info of DATABASEName in $PWFile. Exit\033[0m"
  165. echo
  166. exit
  167. else
  168. echo -e "\033[34mGood \033[0m"
  169. fi
  170. echo -e -n " >> 01-2. Check context information accuracy (DATABASEUser)\t\t: "
  171. if [[ $DATABASEUser == "" ]]; then
  172. echo -e "\033[31mFail. There is no correct info of DATABASEUser in $PWFile. Exit\033[0m"
  173. echo
  174. exit
  175. else
  176. echo -e "\033[34mGood \033[0m"
  177. fi
  178. echo -e -n " >> 01-3. Check context information accuracy (DATABASEPassword)\t: "
  179. if [[ $DATABASEPassword == "" ]]; then
  180. echo -e "\033[31mFail. There is no correct info of DATABASEPassword in $PWFile. Exit\033[0m"
  181. echo
  182. exit
  183. else
  184. echo -e "\033[34mGood \033[0m"
  185. fi
  186. i=$((i+1))
  187. fi
  188. }
  189. CHK_Work_F (){
  190. if [[ `pwd` != $WORK_Folder ]]; then
  191. echo -e " \033[31m02. Fail. It's not work folder \"$WORK_Folder\". \033[0m"
  192. else
  193. echo -e " \033[34m02. Pass. Current Work Folder is $WORK_Folder \033[0m"
  194. i=$((i+1))
  195. fi
  196. }
  197. CHK_SRC_F (){
  198. ls $SOUCE_Folder > /dev/null 2>&1
  199. if [[ $? != 0 ]]; then
  200. echo -e " \033[31m03. Fail. $SOUCE_Folder doesn't exist. \033[0m"
  201. else
  202. echo -e " \033[34m03. Pass. $SOUCE_Folder folder exist. \033[0m"
  203. i=$((i+1))
  204. fi
  205. }
  206. CHK_BAK_F (){
  207. ls $Bak_Folder > /dev/null 2>&1
  208. if [[ $? != 0 ]]; then
  209. echo -e " \033[31m04. Fail. $Bak_Folder doesn't exist. Create a new one. \033[0m"
  210. sudo mkdir -p $Bak_Folder
  211. chown $USER:$USER $Bak_Folder -R
  212. else
  213. echo -e " \033[34m04. Pass. $Bak_Folder folder exist. \033[0m"
  214. i=$((i+1))
  215. fi
  216. }
  217. CHK_UTY_1 (){
  218. man $UTY_1 > /dev/null 2>&1
  219. if [[ $? == 0 ]]; then
  220. echo -e " \033[34m05. Pass. The utility ($UTY_1) was installed. \033[0m"
  221. i=$((i+1))
  222. else
  223. echo -e " \033[31m05. Fail. The utility ($UTY_1) not be installed. \033[0m"
  224. fi
  225. }
  226. CHK_UTY_2 (){
  227. man $UTY_2 > /dev/null 2>&1
  228. if [[ $? == 0 ]]; then
  229. echo -e " \033[34m06. Pass. The utility ($UTY_2) was installed. \033[0m"
  230. i=$((i+1))
  231. else
  232. echo -e " \033[31m06. Fail. The utility ($UTY_2) not be installed. \033[0m"
  233. fi
  234. }
  235. CHK_UTY_3 (){
  236. man $UTY_3 > /dev/null 2>&1
  237. if [[ $? == 0 ]]; then
  238. echo -e " \033[34m07. Pass. The utility ($UTY_3) was installed. \033[0m"
  239. i=$((i+1))
  240. else
  241. echo -e " \033[31mm07. Fail. The utility ($UTY_3) not be installed. \033[0m"
  242. fi
  243. }
  244. CHK_UTY_4 (){
  245. man $UTY_4 > /dev/null 2>&1
  246. if [[ $? == 0 ]]; then
  247. echo -e " \033[34m08. Pass. The utility ($UTY_4) was installed. Setting ED8restore_from_local-mysql.sh use it. \033[0m"
  248. sed -i 's/\/opt\/lampp\/bin\/mysql -u/mysql -u/g' $Script_TMP_Restore
  249. i=$((i+1))
  250. else
  251. echo -e " \033[33m08. Warning! The utility ($UTY_4) not be installed by apt, but service might be provided by xampp. \033[0m"
  252. ls /opt/lampp/bin/mysql > /dev/null 2>&1
  253. if [[ $? == 0 ]]; then
  254. echo -e " \033[35m>> Good. your mysql service is provided by xampp \033[0m"
  255. i=$((i+1))
  256. else
  257. echo -e " \033[31m>> Fail. mysql service not be provided by xampp either. \033[0m"
  258. fi
  259. fi
  260. }
  261. CHK_UTY_5 (){
  262. man $UTY_5 > /dev/null 2>&1
  263. if [[ $? == 0 ]]; then
  264. echo -e " \033[34m09. Pass. The utility ($UTY_5) was installed. Setting ED8backup-mysql-Auto.sh use it. \033[0m"
  265. sed -i 's/\/opt\/lampp\/bin\/mysqldump -u/mysqldump -u/g' $Script_TMP_BAK
  266. i=$((i+1))
  267. else
  268. echo -e " \033[33m09. Fail. The utility ($UTY_5) not be installed by apt. \033[0m"
  269. ls /opt/lampp/bin/mysqldump > /dev/null 2>&1
  270. if [[ $? == 0 ]]; then
  271. echo -e " \033[35m>> Good. your mysqldump is provided by xampp. \033[0m"
  272. i=$((i+1))
  273. else
  274. echo -e " \033[31m>> Fail. mysql service not be provided by xampp either. \033[0m"
  275. fi
  276. fi
  277. }
  278. SEL_BAK_Mode
  279. echo
  280. echo
  281. echo -e "\033[32mStart check list check... \033[0m"
  282. CHK_PWFile
  283. CHK_Work_F
  284. CHK_SRC_F
  285. CHK_BAK_F
  286. CHK_UTY_1
  287. CHK_UTY_2
  288. CHK_UTY_3
  289. CHK_UTY_4
  290. CHK_UTY_5
  291. cp $Script_TMP_BAK $Script_REAL_BAK
  292. cp $Script_TMP_Restore $Script_REAL_Restore
  293. echo
  294. echo
  295. if [[ $i == $CHK_QTY ]]; then
  296. echo -e "\033[33mAll check list Passed. You can start your scripts. \033[0m"
  297. else
  298. echo -e "\033[41;37mFailed. There still be error items. Please check it. \033[0m"
  299. fi
  300. echo