1
+ #! /bin/bash
2
+ # ######################################################
3
+ # $Name: shell_template.sh
4
+ # $Version: v1.0
5
+ # $Function: Backup MySQL Databases Script
6
+ # $Author: ShaoBo Wan
7
+ # $organization: https://github.com/Tinywan
8
+ # $Create Date: 2017-06-27
9
+ # $Description: 定期备份MySQL数据库
10
+ # ######################################################
11
+
12
+ # Shell Env
13
+ SHELL_NAME=" test.sh"
14
+ SHELL_TIME=$( date " +%Y-%m-%d" )
15
+ SHELL_DIR=" /home/www/database_back"
16
+ SHELL_LOG=" ${SHELL_DIR} /${SHELL_NAME} -${SHELL_TIME} .log"
17
+ LOCK_FILE=" /tmp/${SHELL_NAME} .lock"
18
+ MYSQL_DUMP=" /usr/bin/mysqldump"
19
+ MYSQL_BACKUP_DB_NAME=" weblive"
20
+ BACKUP_NAME=${MYSQL_BACKUP_DB_NAME} " -${SHELL_TIME} .sql"
21
+
22
+ # 设置日志级别
23
+ loglevel=0 # debug:0; info:1; warn:2; error:3
24
+ TIME=` date ' +%Y-%m-%d %H:%M:%S' `
25
+ shell_log (){
26
+ local log_type=$1
27
+ local LOG_CONTENT=$2
28
+ # 这里的写入日志时间修改掉,经过一段时间的测试${TIME} 每次都是一个固定的时间,所以在这里修改为每次写入是自动获取当前时间写入日志
29
+ logformat=" ` date ' +%Y-%m-%d %H:%M:%S' ` \t[${log_type} ]\t [${SHELL_NAME} ] Function: ${FUNCNAME[@]} \t[line:` caller 0 | awk ' {print$1}' ` ]\t [log_info: ${LOG_CONTENT} ]"
30
+ {
31
+ case $log_type in
32
+ debug)
33
+ [[ $loglevel -le 0 ]] && echo -e " \033[34m${logformat} \033[0m" ;;
34
+ info)
35
+ [[ $loglevel -le 1 ]] && echo -e " \033[32m${logformat} \033[0m" ;;
36
+ warn)
37
+ [[ $loglevel -le 2 ]] && echo -e " \033[33m${logformat} \033[0m" ;;
38
+ error)
39
+ [[ $loglevel -le 3 ]] && echo -e " \033[31m${logformat} \033[0m" ;;
40
+ esac
41
+ } | tee -a $SHELL_LOG
42
+ }
43
+
44
+ # Shell Usage shell_usage函数,用来告诉用户,这个脚本的使用方法
45
+ shell_usage (){
46
+ # echo $"Usage: $0 {backup}"
47
+ echo ' 你没有输入 1 到 4 之间的数字'
48
+ }
49
+
50
+ # 函数shell_lock和shell_unlock非常简单,就是创建一个锁文件
51
+ shell_lock (){
52
+ touch ${LOCK_FILE}
53
+ }
54
+
55
+ shell_unlock (){
56
+ rm -f ${LOCK_FILE}
57
+ }
58
+
59
+ # Backup MySQL weblive Database with mysqldump or innobackupex
60
+ mysql_backup (){
61
+ if [ -f " $LOCK_FILE " ]; then
62
+ shell_log " ${SHELL_NAME} is running"
63
+ echo " ${SHELL_NAME} " is running && exit
64
+ fi
65
+ shell_log " mysql backup start"
66
+ shell_lock
67
+ sleep 10
68
+ $MYSQL_DUMP $MYSQL_BACKUP_DB_NAME > $SHELL_DIR /$BACKUP_NAME
69
+ cd $SHELL_DIR
70
+ /bin/bzip2 $BACKUP_NAME
71
+ shell_log " mysql backup stop"
72
+ shell_unlock
73
+ }
74
+
75
+ # Main Function
76
+ main (){
77
+ case $1 in
78
+ 1) echo ' 你选择了 1'
79
+ ;;
80
+ 2) echo ' 你选择了 2'
81
+ ;;
82
+ 3) echo ' 你选择了 3'
83
+ ;;
84
+ 4) echo ' 你选择了 4'
85
+ ;;
86
+ * ) shell_usage
87
+ ;;
88
+ esac
89
+ }
90
+
91
+ main2 (){
92
+ case $1 in
93
+ backup) mysql_backup
94
+ ;;
95
+ * ) shell_usage
96
+ ;;
97
+ esac
98
+ }
99
+
100
+
101
+ # Exec
102
+ main $1
103
+
104
+ database=weblive
105
+ databak_dir=/home/www/database_back
106
+ logs_dir=/home/www/database_back/logs
107
+ dumpbin=/usr/bin/mysqldump
108
+
109
+ DATE=$( date +%Y%m%d)
110
+ date_time=$( date +" %y-%m-%d %H:%M:%S" )
111
+ backup_name=sansan_bak1_${DATE} .sql
112
+ logFile=$logs_dir /sansan_${DATE} .log
113
+
114
+ echo " " > $logFile
115
+ echo " -------------$( date +" %y-%m-%d %H:%M:%S" ) backup start ----------------------" >> $logFile
116
+
117
+ $MYSQL_DUMP $MYSQL_BACKUP_NAME > $databak_dir /$backup_name
118
+ cd $databak_dir
119
+ /bin/bzip2 $backup_name
120
+ # 1 mouth = 44640 min
121
+ find ./ -mindepth 1 -maxdepth 3 -type f -name * .bz2 -mmin +43200 | xargs rm -rf
122
+ find ./ -mindepth 1 -maxdepth 3 -type f -name * .sql -mmin +1440 | xargs rm -rf
123
+ echo " -------------$( date +" %y-%m-%d %H:%M:%S" ) backup end ----------------------" >> $logFile
124
+
125
+ FFMPEG_JPG=$( /usr/bin/ffmpeg -y -ss 00:00:10 -i ${FULL_NAME} -vframes 1 ${DIR_NAME} /${BASE_NAME} .jpg && echo " success" || echo " fail" )
0 commit comments