Skip to content

Commit 66136ff

Browse files
committed
add file
2 parents 8c6f6bc + 05e5321 commit 66136ff

File tree

8 files changed

+350
-1
lines changed

8 files changed

+350
-1
lines changed

Lua-Script/metatable/__add.lua

+14
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
<<<<<<< HEAD
2+
=======
3+
--
4+
-- Created by IntelliJ IDEA.
5+
-- User: Administrator
6+
-- Date: 2017/6/6
7+
-- Time: 8:57
8+
-- To change this template use File | Settings | File Templates.
9+
--
10+
>>>>>>> 05e5321a6a0cc4d269c9c15fb03540a680c2a801
111
--在 Lua 5.1 语言中,元表 (metatable) 的表现行为类似于 C++ 语言中的操作符重载,例如我们可以重载 "__add" 元方法 (metamethod),来计算两个 Lua 数组的并集;或者重载 "__index" 方法,来定义我们自己的 Hash 函数。Lua 提供了两个十分重要的用来处理元表的方法,如下:
212
--setmetatable(table, metatable):此方法用于为一个表设置元表。
313
--getmetatable(table):此方法用于获取表的元表对象
@@ -23,4 +33,8 @@ setmetatable(set1, {__add = union}) -- 重载 set1 表的 __add 元方法
2333
local set3 = set1 + set2
2434
for _, j in pairs(set3) do
2535
io.write(j.." ") -->output:30 50 20 40 10
36+
<<<<<<< HEAD
2637
end
38+
=======
39+
end
40+
>>>>>>> 05e5321a6a0cc4d269c9c15fb03540a680c2a801

Nginx-Rtmp/Shell_Log.sh

+9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
#!/bin/bash
2+
#######################################################
3+
# $Name: Shell_Log.sh
4+
# $Version: v1.0
5+
# $Function: Log Script
6+
# $Author: ShaoBo Wan (Tinywan)
7+
# $organization: https://github.com/Tinywan
8+
# $Create Date: 2017-06-29
9+
# $Description: Mysql 自动备份脚本安全加锁机制
10+
#######################################################
211
:<<tinywan
312
[1]author:Tinywan
413
[2]log_format:

Nginx-Rtmp/Shell_script.md

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
## SHELL脚本
2+
+ [如何不耍流氓的做运维之-SHELL脚本](http://mp.weixin.qq.com/s/aI3ha5BvzIvqpn2ddAK5zQ)
3+
+ [已经测试成功自动备份和自动压缩备份数据库文件](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/slimp_backup_db.sh)
4+
## SHELL脚本小技巧
5+
```bash
6+
#!/bin/bash
7+
#######################################################
8+
# $Name: shell_template.sh
9+
# $Version: v1.0
10+
# $Function: Backup MySQL Databases Template Script
11+
# $Author: Jason Zhao
12+
# $organization: https://www.unixhot.com/
13+
# $Create Date: 2016-08-27
14+
# $Description: You know what i mean,hehe
15+
#######################################################
16+
17+
# Shell Env
18+
SHELL_NAME="shell_template.sh"
19+
SHELL_DIR="/opt/shell"
20+
SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
21+
LOCK_FILE="/tmp/${SHELL_NAME}.lock"
22+
23+
#Write Log
24+
shell_log(){
25+
LOG_INFO=$1
26+
echo "$(date "+%Y-%m-%d") $(date "+%H-%M-%S") : ${SHELL_NAME} : ${LOG_INFO}" >> ${SHELL_LOG}
27+
}
28+
29+
# Shell Usage shell_usage函数,用来告诉用户,这个脚本的使用方法
30+
shell_usage(){
31+
echo $"Usage: $0 {backup}"
32+
}
33+
34+
# 函数shell_lock和shell_unlock非常简单,就是创建一个锁文件
35+
shell_lock(){
36+
touch ${LOCK_FILE}
37+
}
38+
39+
shell_unlock(){
40+
rm -f ${LOCK_FILE}
41+
}
42+
43+
# Backup MySQL All Database with mysqldump or innobackupex
44+
mysql_backup(){
45+
if [ -f "$LOCK_FILE" ];then
46+
shell_log "${SHELL_NAME} is running"
47+
echo "${SHELL_NAME}" is running && exit
48+
fi
49+
shell_log "mysql backup start"
50+
shell_lock
51+
sleep 10
52+
shell_log "mysql backup stop"
53+
shell_unlock
54+
}
55+
56+
# Main Function
57+
main(){
58+
case $1 in
59+
backup)
60+
mysql_backup
61+
;;
62+
*)
63+
shell_usage;
64+
esac
65+
}
66+
67+
#Exec
68+
main $1
69+
```
70+

Nginx-Rtmp/backup_mysql.sh

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#!/bin/bash
2+
#######################################################
3+
# $Name: mysql_backup.sh
4+
# $Version: v1.0
5+
# $Function: Backup MySQL Databases Script
6+
# $Author: ShaoBo Wan (Tinywan)
7+
# $organization: https://github.com/Tinywan
8+
# $Create Date: 2017-06-29
9+
# $Description: Mysql 自动备份脚本安全加锁机制
10+
#######################################################
11+
12+
# Shell Env
13+
SHELL_NAME="mysql_backup.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="tinywan_mysql"
20+
BACKUP_NAME=${MYSQL_BACKUP_DB_NAME}"-${SHELL_TIME}.sql"
21+
22+
# Write Log
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+
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}]"
29+
{
30+
case $log_type in
31+
debug)
32+
[[ $loglevel -le 0 ]] && echo -e "\033[34m${logformat}\033[0m" ;;
33+
info)
34+
[[ $loglevel -le 1 ]] && echo -e "\033[32m${logformat}\033[0m" ;;
35+
warn)
36+
[[ $loglevel -le 2 ]] && echo -e "\033[33m${logformat}\033[0m" ;;
37+
error)
38+
[[ $loglevel -le 3 ]] && echo -e "\033[31m${logformat}\033[0m" ;;
39+
esac
40+
} | tee -a $SHELL_LOG
41+
}
42+
43+
44+
shell_usage(){
45+
echo $"Usage: $0 {backup}"
46+
}
47+
48+
shell_lock(){
49+
touch ${LOCK_FILE}
50+
}
51+
52+
shell_unlock(){
53+
rm -f ${LOCK_FILE}
54+
}
55+
56+
mysql_zip(){
57+
cd $SHELL_DIR
58+
/bin/bzip2 $BACKUP_NAME
59+
find ./ -mindepth 1 -maxdepth 3 -type f -name *.bz2 -mmin +43200 | xargs rm -rf
60+
find ./ -mindepth 1 -maxdepth 3 -type f -name *.sql -mmin +1440 | xargs rm -rf
61+
find ./ -mindepth 1 -maxdepth 3 -type f -name *.log -mmin +1440 | xargs rm -rf
62+
}
63+
64+
# Backup MySQL weblive Database with mysqldump or innobackupex
65+
mysql_backup(){
66+
if [ -f "$LOCK_FILE" ];then
67+
shell_log warn "${SHELL_NAME} is running"
68+
exit 1
69+
fi
70+
shell_log info "mysql backup start"
71+
shell_lock
72+
#sleep 10
73+
BACKUP_RES=$($MYSQL_DUMP $MYSQL_BACKUP_DB_NAME > $SHELL_DIR/$BACKUP_NAME && echo "success" || echo "fail")
74+
if [ "${BACKUP_RES}" == "fail" ];then
75+
shell_log error "MYSQL_BACKUP_DB error : ${BACKUP_RES}"
76+
shell_unlock
77+
exit 1
78+
fi
79+
mysql_zip
80+
shell_log info "mysql backup stop"
81+
shell_unlock
82+
}
83+
84+
# Main Function
85+
main(){
86+
case $1 in
87+
backup) mysql_backup
88+
;;
89+
*) shell_usage
90+
;;
91+
esac
92+
}
93+
94+
#Exec
95+
main $1

Nginx-Rtmp/shell_usage.sh

+125
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
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")

Nginx-Rtmp/slimp_backup_db.sh

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/bin/bash
2+
#######################################################
3+
# $Name: mysql_backup.sh
4+
# $Version: v1.0
5+
# $Function: Backup MySQL Databases Script
6+
# $Author: ShaoBo Wan (Tinywan)
7+
# $organization: https://github.com/Tinywan
8+
# $Create Date: 2017-06-29
9+
# $Description: Mysql 自动备份脚本安全加锁机制
10+
#######################################################
11+
12+
database=weblive
13+
databak_dir=/home/www/database_back
14+
logs_dir=/home/www/database_back/logs
15+
dumpbin=/usr/bin/mysqldump
16+
17+
DATE=$(date +%Y%m%d)
18+
date_time=$(date +"%y-%m-%d %H:%M:%S")
19+
backup_name=sansan_bak1_${DATE}.sql
20+
logFile=$logs_dir/sansan_${DATE}.log
21+
22+
echo " " > $logFile
23+
echo "-------------$(date +"%y-%m-%d %H:%M:%S") backup start ----------------------" >> $logFile
24+
25+
$dumpbin $database >$databak_dir/$backup_name
26+
/bin/bzip2 $backup_name
27+
cd $databak_dir
28+
# 1 mouth = 44640 min
29+
find ./ -mindepth 1 -maxdepth 3 -type f -name *.bz2 -mmin +43200 | xargs rm -rf
30+
find ./ -mindepth 1 -maxdepth 3 -type f -name *.sql -mmin +1440 | xargs rm -rf
31+
echo "-------------$(date +"%y-%m-%d %H:%M:%S") backup end ----------------------" >> $logFile

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
- [x] 编写快速安全Bash脚本的建议
1111
- [x] Shell脚本实现分日志级别记录日志
1212
- [x] Nginx日志定时备份和删除
13+
- [x] SHELL脚本小技巧
14+
- [x] Mysql 自动备份脚本安全加锁机制
1315
+ [Lua基础知识](#Lua_base_knowledge)
1416
+ [Lua 基础语法](#Lua-base)
1517
+ [luajit 执行文件默认安装路径](#Nginx_base_knowledge)
@@ -118,6 +120,8 @@
118120
+ [编写快速安全Bash脚本的建议](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Shell/write-shell-suggestions.md)
119121
+ [shell脚本实现分日志级别记录日志](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/Shell_Log.sh)
120122
+ [Nginx日志定时备份和删除](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/Shell_Nginx_Log_cut.sh)
123+
+ [SHELL脚本小技巧](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/Shell_script.md)
124+
+ [Mysql 自动备份脚本安全加锁机制](https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx-Rtmp/backup_mysql.sh)
121125
## <a name="Lua_base_knowledge"/> Lua基础知识
122126
#### Lua 基础语法 <a name="Lua-base"/>
123127
+ 删除一个全局变量,只要将变量值赋值为nil:`a = nil`,当且仅当一个变量不为nil 时,这个变量存在
@@ -524,7 +528,7 @@
524528
525529
local t1 = {}
526530
local t2 = {}
527-
local mt = { __index = smartMan } -- __index 可以是一个函数,也可以是一个函数
531+
local mt = { __index = smartMan } -- __index 可以是一个表,也可以是一个函数
528532
setmetatable(t1, mt)
529533
setmetatable(t2, mt)
530534
print(t1.money)

Shell/write-shell-suggestions.md

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
### 编写快速安全Bash脚本的建议
2+
+ [编写快速安全 Bash 脚本的建议 ](https://www.oschina.net/translate/bash-scripting-quirks-safety-tips)
23
+ 变量赋值
34
+ Bash变量并不要求全部大写,但是通常是大写的
45
+ 变量赋值不要在`=`运算符的两边放置空格符

0 commit comments

Comments
 (0)