Linux/VPS下定时通过电子邮件(Email)发送文件及MySQL数据库备份

最近Linux搞得比较多,之前有个精简版的VPS服务器,今天又拿过来测试,主要是定期为上面的网站做个备份,大概看了一下,需要备份的分别有两个地方:1. 网站的主目录;2. MySQL数据库。于是想搞个定时发送备份文件到指定邮箱的做法。Linux刚上手,也不是很熟练,参考了一些命令,以及前辈们的备份做法,硬着头皮写了Bash Shell脚本,初步测试下来基本满足了要求,在这里分享给大家参考,不过建议大家使用前在实验环境下测试确保正常,如果因为潜在问题造成损失我可不负责哦:-)当然对于我这种新手而言,这样的脚本难免会有Bug,希望高手不吝指出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
 
# Author: wangye
# For more information please visit:
# http://wangye.org/
# 请在使用本脚本前做好测试工作,脚本功能仅供参考,
# 对于可能的潜在问题造成损失,本人不承担责任。
 
MYSQL_USERNAME="mysql-username"
MYSQL_PASSWORD="mysql-password"
 
# 下面这行指示接收备份文件的电子邮件地址
BACKUP_RECEVIER="email-address-recive-backup@example.com"
BACKUP_FILENAME="/var/sample-site" # 需要备份的目录
BACKUP_DBNAME="sample" # 需要备份的数据库名称
BACKUP_PREFIX="backup_" # 备份文件的前缀
 
# 下面一些命令路径可以通过whereis获取
MYSQLDUMP_PATH="/usr/bin" # mysqldump 命令所在的路径
TARCOMPRESSOR_PATH="/bin" # tar 命令所在的路径
RM_PATH="/bin" # rm 命令所在的路径
MUTTMAIL_PATH="/usr/bin" # mutt 命令所在的路径
TEMP_PATH="/tmp" # 临时目录
 
# 产生临时名称形如 backup_20120221 名称
make_backup_name() {
    TEMPNAME=${BACKUP_PREFIX}$(date +"%Y%m%d")
}
 
# 产生临时备份目录
make_backup_dir() {
    make_backup_name
    TEMPDIR=${TEMP_PATH}/$?
    mkdir -m 777 -p $TEMPDIR
}
 
backup_files() {
    ${TARCOMPRESSOR_PATH}/tar -zcvf \
        ${TEMP_PATH}/${TEMPNAME}.tar.gz ${BACKUP_FILENAME}
}
 
backup_databases() {
    local EXPORTDIR=$1
    ${MYSQLDUMP_PATH}/mysqldump -u${MYSQL_USERNAME} \
      -p${MYSQL_PASSWORD} \
      ${BACKUP_DBNAME} >${EXPORTDIR}/${BACKUP_DBNAME}.sql
 
    ${TARCOMPRESSOR_PATH}/tar -zcvf \
      ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz ${EXPORTDIR}
}
 
send_byemail() {
    echo "**IMPORTANT BACKUP** Hi! :-)\n\n$(uname -a)"| \
        $MUTTMAIL_PATH/mutt -s "** System Backup$(date +%Y-%m-%d)" \
            -a ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz \
             ${TEMP_PATH}/${TEMPNAME}.tar.gz -- \
            ${BACKUP_RECEVIER}
}
 
# 清除产生的临时文件(使用了rm -rf怕怕中,不过目标路径正确就OK啦)
cleanup() {
    $RM_PATH/rm -rf $TEMPDIR
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}_${BACKUP_DBNAME}.tar.gz
    $RM_PATH/rm -rf ${TEMP_PATH}/${TEMPNAME}.tar.gz
}
 
main() {
   make_backup_dir
   backup_databases $TEMPDIR
   backup_files
   send_byemail
   cleanup
}
 
main
 
exit 0

继续阅读

Linux下查看已登录用户以及pkill强制活动用户退出命令

最近在学习研究Linux,命令太多也不太容易记,不过熟练了倒还好。今天不得不吐槽一下电信,经常到晚上就莫名其妙的掉线,虽然立即又恢复了,但是给我一些网络操作带来了麻烦。比如说今天我用PuTTY连接某台服务器,然后进行配置文件编辑操作,在我未存档的时候电信玩了一次掉线,好了,PuTTY显示网络错误,然后不响应任何操作了。于是只有重新登录,重新登录后立即编辑完配置文件并存档退出编辑器。然后用w命令查看活动用户,果然发现刚才虽然掉线了,但是没有完全退出登录,也就是说刚才的登录还是活动的,这下出现了重复登录的情况:

继续阅读