Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

ED8backup-mysql-Auto.sh 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. #!/bin/bash
  2. BAK_Project=ED8
  3. USER=`whoami`
  4. PWFile="/home/$USER/PW/mysql_${BAK_Project}.info"
  5. DATABASEName="`cat $PWFile | grep Database_Name: | awk '{print $NF}'`"
  6. DATABASEUser="`cat $PWFile | grep ID: | awk '{print $NF}'`"
  7. DATABASEPassword="`cat $PWFile | grep Password: | awk '{print $NF}'`"
  8. TS=`date +"%Y%m%d-%H%M%S"`
  9. LOG_Folder="/ED/${BAK_Project}/Script_${BAK_Project}/_LOG"
  10. LOG1=/ED/${BAK_Project}/Script_${BAK_Project}/_LOG/${BAK_Project}backup-mysql-Auto.log
  11. Bak_Folder="/ED/${BAK_Project}/Backup_file"
  12. Bak_File_Name=$Bak_Folder/backup-mysql-${BAK_Project}.gz
  13. Bak_File_Name_TS=$Bak_Folder/backup-mysql-${BAK_Project}-$TS.gz
  14. BAK_Disk_A=/dev/sdb
  15. BAK_Disk_A_Mount_Point="/BAK_Disk_A"
  16. BAK_Disk_A_Hostname_Folder="$BAK_Disk_A_Mount_Point/`hostnamectl | grep "Static hostname" | awk '{print $NF}'`"
  17. BAK_Disk_A_BAK_Folder="$BAK_Disk_A_Hostname_Folder/${BAK_Project}/Backup_file"
  18. BAK_Disk_A_Bak_File_Name_TS="$BAK_Disk_A_BAK_Folder/backup-mysql-${BAK_Project}-$TS.gz"
  19. BAK_Disk_B=/dev/sda
  20. BAK_Disk_B_Mount_Point="/BAK_Disk_B"
  21. BAK_Disk_B_Hostname_Folder="$BAK_Disk_B_Mount_Point/`hostnamectl | grep "Static hostname" | awk '{print $NF}'`"
  22. BAK_Disk_B_BAK_Folder="$BAK_Disk_B_Hostname_Folder/${BAK_Project}/Backup_file"
  23. BAK_Disk_B_Bak_File_Name_TS="$BAK_Disk_B_BAK_Folder/backup-mysql-${BAK_Project}-$TS.gz"
  24. ##### FUNC
  25. CHK_PWFile (){
  26. echo -e "\033[32mCheck the mysql password info file exist: \033[0m"
  27. ls $PWFile > /dev/null 2>&1
  28. if [[ $? != 0 ]]; then echo -e " >> \033[31mFail. $PWFile didn't exist. Please create one. Exit\033[0m" | tee -a $LOG1; echo
  29. echo -e "$PWFile Content example: "
  30. echo -e "Database_Name: db_ed8_"
  31. echo -e "ID: ed"
  32. echo -e "Password: +039*******"; echo; exit
  33. else echo -e " >> \033[34mPass. $PWFile exist.\033[0m" | tee -a $LOG1
  34. echo -e -n " Check context information accuracy (DATABASEName)\t\t: "
  35. if [[ $DATABASEName == "" ]]; then echo -e "\033[31mFail. There is no correct info of DATABASEName in $PWFile. Exit\033[0m"; echo; exit
  36. else echo -e "\033[34mPass. \033[0m"
  37. fi
  38. echo -e -n " Check context information accuracy (DATABASEUser)\t\t: "
  39. if [[ $DATABASEUser == "" ]]; then echo -e "\033[31mFail. There is no correct info of DATABASEUser in $PWFile. Exit\033[0m"; echo; exit
  40. else echo -e "\033[34mPass. \033[0m"
  41. fi
  42. echo -e -n " Check context information accuracy (DATABASEPassword)\t: "
  43. if [[ $DATABASEPassword == "" ]]; then echo -e "\033[31mFail. There is no correct info of DATABASEPassword in $PWFile. Exit\033[0m"; echo; exit
  44. else echo -e "\033[34mPass. \033[0m"
  45. fi
  46. fi
  47. }
  48. CHK_LOG_Folder (){
  49. echo -e "\033[32mCheck the auto backup log saving folder exist: \033[35m($LOG_Folder) \033[0m"
  50. ls $LOG_Folder > /dev/null 2>&1
  51. if [[ $? != 0 ]]; then echo -e " >> \033[33mWarning! There is no folder \"$LOG_Folder\". Next will create a new one.\033[0m" | tee -a $LOG1
  52. sudo mkdir -p $LOG_Folder
  53. sudo chown $USER:$USER $LOG_Folder -R
  54. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  55. else echo -e " >> \033[34mPass. There is a folder \"$LOG_Folder\". \033[0m" | tee -a $LOG1
  56. fi
  57. }
  58. CHK_Bak_Folder (){
  59. echo -e "\033[32mCheck the local original backup folder exist: \033[35m($Bak_Folder) \033[0m"
  60. ls $Bak_Folder > /dev/null 2>&1
  61. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. Backup file saving folder: $Bak_Folder exist, go next.\033[0m" | tee -a $LOG1
  62. else echo -e " >> \033[33mWarning! There is no Backup file saving folder: $Bak_Folder, next will create a new one automatically.\033[0m" | tee -a $LOG1
  63. sudo mkdir -p $Bak_Folder
  64. sudo chown $USER:$USER $Bak_Folder -R
  65. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  66. fi
  67. }
  68. Mysql_Dump (){
  69. echo -e "\033[32mStarting mysqldump...\033[0m"
  70. echo -e " \033[41;37mImportant! Please check below messages for making sure mysqldump be performed exactly. \033[0m" | tee -a $LOG1
  71. mysqldump -u $DATABASEUser -p$DATABASEPassword $DATABASEName | gzip > $Bak_File_Name
  72. # mysqldump -u $DATABASEUser -p$DATABASEPassword $DATABASEName | gzip > $Bak_File_Name
  73. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. mysql dump w/ gzip OK. \033[0m" | tee -a $LOG1
  74. else echo -e " >> \033[41;37m Fail. mysql dump w/ gzip failed. Exit \033[0m" | tee -a $LOG1
  75. echo -e " >> \033[31m If you got error message, please try to perform below command for debugging\033[0m" | tee -a $LOG1
  76. echo -e " >> \033[31m # sudo mysqldump -u ed -p db_ed8_ | gzip > $Bak_File_Name \033[0m" | tee -a $LOG1; echo; exit
  77. fi
  78. echo -e " \033[46;30m----- Debug message ---------------\033[0m" | tee -a $LOG1
  79. echo -e " \033[32m* If mysqldump: Got error: 1045: Access denied for user 'ed'@'localhost' (using password: YES) when trying to connect \033[0m "
  80. echo -e " >> Please check the content of $PWFile"
  81. echo -e "\033[32mStarting make a copy with timastamp filename...\033[0m" | tee -a $LOG1
  82. cp $Bak_File_Name $Bak_File_Name_TS
  83. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. Make a copy OK - \033[35m$Bak_File_Name_TS \033[0m" | tee -a $LOG1
  84. else echo -e " >> \033[41;37mFail. Make a copy failed. Exit\033[0m - \033[35m$Bak_File_Name_TS \033[0m" | tee -a $LOG1; echo; exit
  85. fi
  86. }
  87. CHK_BAK_Disk_A (){
  88. echo -e "\033[32mCheck the detection of Backup_Disk_A: \033[35m(lsscsi $BAK_Disk_A) \033[0m"
  89. lsscsi | grep $BAK_Disk_A > /dev/null 2>&1
  90. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. The BAK_Disk_A \"$BAK_Disk_A\" be detected by lsscsi. \033[0m" | tee -a $LOG1
  91. else echo -e " >> \033[41;37mFail. The BAK_Disk_A \"$BAK_Disk_A\" not be detected by lsscsi. Exit \033[0m" | tee -a $LOG1; echo; exit
  92. fi
  93. }
  94. CHK_BAK_Disk_B (){
  95. echo -e "\033[32mCheck the detection of Backup_Disk_A: \033[35m(lsscsi $BAK_Disk_B) \033[0m"
  96. lsscsi | grep $BAK_Disk_B > /dev/null 2>&1
  97. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. The BAK_Disk_B \"$BAK_Disk_B\" be detected by lsscsi. \033[0m" | tee -a $LOG1
  98. else echo -e " >> \033[41;37mFail. The BAK_Disk_B \"$BAK_Disk_B\" not be detected by lsscsi. Exit \033[0m" | tee -a $LOG1; echo; exit
  99. fi
  100. }
  101. CHK_BAK_Disk_A_Mount_Point (){
  102. echo -e "\033[32mCheck the BAK_Disk_A mount point folder exist: \033[35m($BAK_Disk_A_Mount_Point) \033[0m"
  103. ls $BAK_Disk_A_Mount_Point > /dev/null 2>&1
  104. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. The BAK_Disk_A mount point exist \"$BAK_Disk_A_Mount_Point\"\033[0m" | tee -a $LOG1
  105. else echo -e " >> \033[33mWarning! The BAK_Disk_A mount point doesn't exist \"$BAK_Disk_A_Mount_Point\"\033[0m, auto create a new one. " | tee -a $LOG1
  106. sudo mkdir -p $BAK_Disk_A_Mount_Point
  107. sudo chown $USER:$USER $BAK_Disk_A_Mount_Point -R
  108. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  109. fi
  110. }
  111. CHK_BAK_Disk_B_Mount_Point (){
  112. echo -e "\033[32mCheck the BAK_Disk_A mount point folder exist: \033[35m($BAK_Disk_B_Mount_Point) \033[0m"
  113. ls $BAK_Disk_B_Mount_Point > /dev/null 2>&1
  114. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. The BAK_Disk_B mount point exist \"$BAK_Disk_B_Mount_Point\"\033[0m" | tee -a $LOG1
  115. else echo -e " >> \033[33mWarning! The BAK_Disk_B mount point doesn't exist \"$BAK_Disk_B_Mount_Point\"\033[0m, auto create a new one. " | tee -a $LOG1
  116. sudo mkdir -p $BAK_Disk_B_Mount_Point
  117. sudo chown $USER:$USER $BAK_Disk_B_Mount_Point -R
  118. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  119. fi
  120. }
  121. CHK_BAK_Disk_A_Mount_Status (){
  122. echo -e "\033[32mCheck the BAK_Disk_A mount status: \033[0m"
  123. if [[ `df -h | grep $BAK_Disk_A | awk '{print $NF}'` != $BAK_Disk_A_Mount_Point ]]; then
  124. echo -e " >> \033[31mFail. The BAK_Disk_A ($BAK_Disk_A) not be mounted at \"$BAK_Disk_A_Mount_Point\". Exit. \033[0m" | tee -a $LOG1
  125. df -h; echo; exit
  126. else echo -e " >> \033[34mPass. The BAK_Disk_A ($BAK_Disk_A) be mounted at \"$BAK_Disk_A_Mount_Point\"\033[0m" | tee -a $LOG1
  127. fi
  128. }
  129. CHK_BAK_Disk_B_Mount_Status (){
  130. echo -e "\033[32mCheck the BAK_Disk_B mount status: \033[0m"
  131. if [[ `df -h | grep $BAK_Disk_B | awk '{print $NF}'` != $BAK_Disk_B_Mount_Point ]]; then
  132. echo -e " >> \033[31mFail. The BAK_Disk_B ($BAK_Disk_B) not be mounted at \"$BAK_Disk_B_Mount_Point\". Exit. \033[0m" | tee -a $LOG1
  133. df -h; echo; exit
  134. else echo -e " >> \033[34mPass. The BAK_Disk_B ($BAK_Disk_B) be mounted at \"$BAK_Disk_B_Mount_Point\"\033[0m" | tee -a $LOG1
  135. fi
  136. }
  137. CHK_BAK_Disk_A_Hostname_Folder (){
  138. echo -e "\033[32mCheck the BAK_Disk_A Hostname folder status: \033[35m($BAK_Disk_A_Hostname_Folder) \033[0m"
  139. ls $BAK_Disk_A_Hostname_Folder > /dev/null 2>&1
  140. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. BAK_Disk_A Hostname folder: $BAK_Disk_A_Hostname_Folder exist, go next.\033[0m" | tee -a $LOG1
  141. else echo -e " >> \033[33mWarning! BAK_Disk_A Hostname folder: $BAK_Disk_A_Hostname_Folder, next will create a new one automatically.\033[0m" | tee -a $LOG1
  142. sduo mkdir -p $BAK_Disk_A_Hostname_Folder
  143. sudo chown $USER:$USER $BAK_Disk_A_Hostname_Folder -R
  144. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  145. fi
  146. }
  147. CHK_BAK_Disk_B_Hostname_Folder (){
  148. echo -e "\033[32mCheck the BAK_Disk_B Hostname folder status: \033[35m($BAK_Disk_B_Hostname_Folder) \033[0m"
  149. ls $BAK_Disk_B_Hostname_Folder > /dev/null 2>&1
  150. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. BAK_Disk_B Hostname folder: $BAK_Disk_B_Hostname_Folder exist, go next.\033[0m" | tee -a $LOG1
  151. else echo -e " >> \033[31mWarning! BAK_Disk_B Hostname folder: $BAK_Disk_B_Hostname_Folder, next will create a new one automatically.\033[0m" | tee -a $LOG1
  152. sudo mkdir -p $BAK_Disk_B_Hostname_Folder
  153. sudo chown $USER:$USER $BAK_Disk_B_Hostname_Folder -R
  154. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  155. fi
  156. }
  157. CHK_BAK_Disk_A_BAK_Folder (){
  158. echo -e "\033[32mCheck the BAK_Disk_A ${BAK_Project} backup folder status: \033[35m($BAK_Disk_A_BAK_Folder) \033[0m"
  159. ls $BAK_Disk_A_BAK_Folder > /dev/null 2>&1
  160. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. BAK_Disk's Backup file saving folder: $BAK_Disk_A_BAK_Folder exist, go next.\033[0m" | tee -a $LOG1
  161. else echo -e " >> \033[33mWarning! There is no BAK_Disk's Backup file saving folder: $BAK_Disk_A_BAK_Folder, next will create a new one automatically.\033[0m" | tee -a $LOG1
  162. sudo mkdir -p $BAK_Disk_A_BAK_Folder
  163. sudo chown $USER:$USER $BAK_Disk_A_BAK_Folder -R
  164. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  165. fi
  166. }
  167. CHK_BAK_Disk_B_BAK_Folder (){
  168. echo -e "\033[32mCheck the BAK_Disk_B ${BAK_Project} backup folder status: \033[35m($BAK_Disk_B_BAK_Folder) \033[0m"
  169. ls $BAK_Disk_B_BAK_Folder > /dev/null 2>&1
  170. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. BAK_Disk's Backup file saving folder: $BAK_Disk_B_BAK_Folder exist, go next.\033[0m" | tee -a $LOG1
  171. else echo -e " >> \033[33mWarning! There is no BAK_Disk's Backup file saving folder: $BAK_Disk_B_BAK_Folder, next will create a new one automatically.\033[0m" | tee -a $LOG1
  172. sudo mkdir -p $BAK_Disk_B_BAK_Folder
  173. sudo chown $USER:$USER $BAK_Disk_B_BAK_Folder -R
  174. if [[ $? != 0 ]]; then echo -e " >> \033[41;37mCreate the folder failed. Exit\033[0m"; echo; exit; fi
  175. fi
  176. }
  177. CP_TO_BAK_Disk_A (){
  178. echo -e "\033[32mCopy the backup files to Backup_Disk_A...\033[0m"
  179. cp $Bak_File_Name_TS $BAK_Disk_A_Bak_File_Name_TS
  180. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. Make a copy OK - \033[35m$BAK_Disk_A_Bak_File_Name_TS \033[0m" | tee -a $LOG1
  181. else echo -e " >> \033[41;37mFail. Make a copy failed. Exit\033[0m - \033[35m$BAK_Disk_A_Bak_File_Name_TS \033[0m" | tee -a $LOG1; echo
  182. echo -e " \033[35mIf you got (Permission denied) message, please perform below command and re-do again. \033[0m"
  183. echo -e " \033[35mIt happened at fist backup, caused from created disk mount point folder ($BAK_Disk_A_Mount_Point) with sudo \033[0m"
  184. echo -e " \033[41;37m# sudo chown $USER:$USER $BAK_Disk_A_Mount_Point \033[0m"; echo; exit
  185. fi
  186. }
  187. CP_TO_BAK_Disk_B (){
  188. echo -e "\033[32mCopy the backup files to Backup_Disk_B...\033[0m"
  189. cp $Bak_File_Name_TS $BAK_Disk_B_Bak_File_Name_TS
  190. if [[ $? == 0 ]]; then echo -e " >> \033[34mPass. Make a copy OK - \033[35m$BAK_Disk_B_Bak_File_Name_TS \033[0m" | tee -a $LOG1
  191. else echo -e " >> \033[41;37mFail. Make a copy failed. Exit\033[0m - \033[35m$BAK_Disk_B_Bak_File_Name_TS \033[0m" | tee -a $LOG1; echo
  192. echo -e " \033[35mIf you got (Permission denied) message, please perform below command and re-do again. \033[0m"
  193. echo -e " \033[35mIt happened at fist backup, caused from created disk mount point folder ($BAK_Disk_B_Mount_Point) with sudo \033[0m"
  194. echo -e " \033[41;37m# sudo chown $USER:$USER $BAK_Disk_B_Mount_Point \033[0m"; echo; exit
  195. fi
  196. }
  197. echo -e "===== \033[43;30m`date +"%Y/%m/%d %H:%M:%S"`\033[0m ===== \033[35m$0\033[0m =====" | tee -a $LOG1
  198. CHK_PWFile
  199. CHK_LOG_Folder
  200. CHK_Bak_Folder
  201. Mysql_Dump
  202. CHK_BAK_Disk_A
  203. CHK_BAK_Disk_A_Mount_Point
  204. CHK_BAK_Disk_A_Mount_Status
  205. CHK_BAK_Disk_A_Hostname_Folder
  206. CHK_BAK_Disk_A_BAK_Folder
  207. CP_TO_BAK_Disk_A
  208. CHK_BAK_Disk_B
  209. CHK_BAK_Disk_B_Mount_Point
  210. CHK_BAK_Disk_B_Mount_Status
  211. CHK_BAK_Disk_B_Hostname_Folder
  212. CHK_BAK_Disk_B_BAK_Folder
  213. CP_TO_BAK_Disk_B
  214. echo
  215. echo -e "\033[33mIf you want to check the LOG, please perform below command: "
  216. echo -e " # cat $LOG1\033[0m"; echo