- Linux环境下防止.htaccess可被下载的方法由于网站的设置问题,有时候会导致网站的.htaccess可以被下载,这时候在nginx的规则里加上 location ~ ^.*\.(zip|htaccess|htpasswd|ini|php|sh)$ { deny all; } 或者location ~ /\.ht {deny all;} 然后重...
- CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放(转)转载自张戈博客的文章。众所周知,DDoS攻击指的是分布式拒绝服务。而CC攻击只是DDoS攻击的一种,本文所阐述的CC攻击,指的是每个IP都以高并发请求攻击,而非分布式海量IP的低并发DDoS攻击! 对于个人低配服务器,...
- linux下利用iptables限制同一IP连接数量当WEB站点受到cc攻击时,我们可以用iptables来防止web服务器被CC攻击,实现自动屏蔽IP的功能。 1.系统要求 (1) LINUX 内核版本:2.6.9-42ELsmp或2.6.9-55ELsmp(其它内核版本需要重新编译内核,比较麻烦,...
- Linux下查看文件和文件夹大小在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件夹的方法。 1: 如何查...
- Linux Vps系统防CC攻击自动拉黑IP增强版脚本Linux Vps系统防CC攻击自动拉黑IP脚本分2个版本,普通版是加入到crontab计划任务执行的,每5分钟执行一次。增强版主要是为了弥补用crontab执行时间间隔最低只能是1分钟的不足,可以让CC防护更严密,甚至每隔1S执...
- 多个Linux vps 定时自动释放内存脚本VPS运行一段时间后,内存占用就会慢慢变的越来越大,如果遇到流量突然激增,在高内存占用的情况下很容易导致服务器死机。最好的方法是定时检查VPS内存占用情况,如果内存超过一定大小时自动释放内存。下面给大家...
- linux查看apache加载了哪些模块及apache httpd的最大连接数合理设置由于apache 2.x根据httpd的工作模式分了很多块,为了对apache httpd的最大连接数进行合理设置,我们就要先在httpd.conf中加载httpd-mpm.conf配置(去掉前面的Include 注释#符号,如下):# Server-pool managem...
- Linux VPS自动备份数据库和网站文件并上传FTP空间Linux VPS自动备份数据库和网站文件并上传FTP空间,这是高手写的一个vps自动备份脚本,可以实现每日自动备份网站数据库和网站文件。并上传到FTP空间,或者发送到你邮箱,非常实用。本脚本适用于VPS、云主机以及独...
Linux/vps(数据库/整站)本地七天循环备份和七牛远程备份脚本
分享来着张戈博客的Linux/vps(数据库/整站)本地七天循环备份和七牛远程备份脚本
①、七天循环备份
受服务器空间制约,我们不可能在VPS上每天都备份一份新的网站数据,一是没必要,二是占空间。我们折中一下,采用星期命名,每次备份将覆盖上星期同一天的文件。从而只备份7份数据,不至于占用特别大的空间。
如果,你的vps很小家子气或是网站数据太庞大,那还可以再折中一下,仅在星期二、四、六做备份,即总共三份数据。甚至还可以选一个星期的某一天做备份,即一周备份一次,也是可以的。
在空间允许的情况下,个人推荐做7天循环备份,在vps数据全部丢失的时候,能最大程度的容灾,恢复到丢失前一天,甚至是当天凌晨备份的所有数据,非常完美!
②、七牛远程备份
七牛远程备份就是将本地的7天备份的数据每天同步至七牛云存储私人空间,就算整台vps奔溃时,还能从容的恢复数据。相当于双保险,要知道七牛和你的vps同时宕机的几率是非常小的。
二、准备工作
①、整理vps已有网站对应的数据库用户名和密码(如不清楚可直接用mysql的root帐号);
②、整理vps已有网站的根目录所在路径,比如 /home/wwwroot/zhangge.net
③、想好本地想要存放备份文件的路径,比如/home/wwwbackup
④、还没有七牛帐号的,先去注册一个,然后新建一个私人空间(为了数据安全,请勿使用公开空间,仅恢复数据时临时切换到公开状态即可),记录空间名以及帐号密钥:
三、本地七天备份
①、登录VPS编写脚本
脚本代码如下:
#!/bin/bash
#Author:ZhangGe
#Des:Backup database and webfile.
#Date:2014-8-28
TODAY=`date +%u`
if [ -z $1 ];then
echo Needed Usage arguments. Please Use --help to get more infomation.
exit 1
fi
if [ "$1" == "db" ];then
domain=$2
dbname=$3
mysqluser=$4
mysqlpd=$5
back_path=$6
test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
cd $back_path
mysqldump -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables>$back_path/$domain\_db_$TODAY\.sql
test -f $back_path/$domain\_db_$TODAY\.sql || (echo "MysqlDump failed! Please CheckOut Or feedback to zhangge.net..." && exit 2)
zip --version >/dev/null && zip -Pmypassword -m $back_path/$domain\_db_$TODAY\.zip $domain\_db_$TODAY\.sql
elif [ "$1" == "file" ];then
domain=$2
site_path=$3
back_path=$4
test -d $site_path || (echo "$site_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip
zip --version >/dev/null && zip -Pmypassword -9r $back_path/$domain\_$TODAY\.zip $site_path
elif [ "$1" == "--help" ];then
clear
echo =====================================Help infomation=========================================
echo 1. Use For Backup database:
echo The \$1 must be \[db\]
echo \$2: \[domain\]
echo \$3: \[dbname\]
echo \$4: \[mysqluser\]
echo \$5: \[mysqlpassword\]
echo \$6: \[back_path\]
echo
echo For example:./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/zhangge.net
echo
echo 2. Use For Backup webfile:
echo The \$1 must be [\file\]:
echo \$2: \[domain\]
echo \$3: \[site_path\]
echo \$4: \[back_path\]
echo
echo For example:./backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net
echo =====================================End of Hlep==============================================
exit 0
else
echo "Error!Please Usage --help to get help infomation!"
exit 2
fi
使用说明:
②、将代码中的2处 mypassword 改成你自定义的压缩密码(确保数据安全),并保存为backup.sh之后,执行chmod +x backup.sh 赋执行权限。
同时要注意一下脚本中的mysqldump 命令,在有的网站程序下需要写明完整路径,否则可能备份出来的数据库大小为0。
为了避免复制转码问题,文章最后提供打包下载
Ps:下载的代码包没有加密打包,请自行参考上述代码,自行加上【-P密码】参数。
③、执行./backup.sh --help 可获得帮助说明
④、备份数据库:
命令行示例如下:
./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/zhangge.net
命令参数说明:
参数1:db,设置备份类型为数据库
参数2:domain 网站域名,如zhangge.net,用于备份文件命名
参数3:dbname 要备份的数据库名次,如zhangge_db
参数4:mysqluser mysql用户名,如不清楚可用mysql 的root帐号
参数5:mysqlpassword mysql密码
参数6:back_path 备份文件存放路径
⑤ 备份网站文件:
命令行示例:
./backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/zgboke.com
命令参数说明:
参数1:file,设置备份类型为网站文件
参数2:domain 网站域名,如zgboke.com,同样用于备份文件的命名
参数3:site_path 网站文件的路径,如/home/wwwroot/zgboke.com
参数4:back_path 备份文件存放路径
Tips:为了方便后面的七牛同步,建议将备份文件存放到同一个上级目录,然后以网站域名来命名当前目录,比如,同一个vps的备份数据,我都放到/home/wwwbackup/,然后以各自的网站域名来命名,zhangge.net的数据库和文件我都统一存放到/home/wwwbackup/zhangge.net。
最新补充:2014/10/25日,手动执行命令检查时,发现报如下错误信息:
Access denied for user 'dbuser'@'localhost' to database 'db' when using LOCK TABLES
即提示该用户不具备锁表权限,导致数据导出失败!这种情况一般发生在数据库正在执行某个查询动作,此时普通帐号是无法导出备份的!
解决办法:
方法①、修改上面的备份脚本,找到如下行
mysqldump -u$mysqluser -p$mysqlpd $dbname>$back_path/$domain\_db_$TODAY\.sql
添加--skip-lock-tables参数即可,即不锁表导出(可能丢失某些正在更新的数据,当然凌晨时候几率很小)。
mysqldump -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables>$back_path/$domain\_db_$TODAY\.sql
方法②、使用root帐号执行备份即可:
执行crontab -e 修改Linux计划任务,修改数据库备份计划命令行中的用户名为mysql的root帐号:
./backup.sh db zhangge.net zhangge_db root rootpasswd /home/wwwbackup/zhangge.net
个人推荐方法②,最大限度的保证了数据备份的完整度!
说明:可用crontab -e命令来编辑修改Linux计划任务,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
⑥、建立七天备份的任务计划
I. 先执行crontab -l 看看命令是否存在,若不存在,请使用 yum -y install vixie-cron crontabs 安装crond
II. 确认crond已存在后,请执行/etc/init.d/crond start 确保启动了crond服务,并执行chkconfig crond on设置为开机启动。
III. 执行crontab -e 建立任务计划,如下是我的vps的任务计划,请参考添加:
#backup zgboke.com:
0 3 * * * /root/scripts/backup.sh db zgboke.com zgboke zgboke 123456 /home/wwwbackup/zgboke.com >/dev/null 2>&1
5 3 * * * /root/scripts/backup.sh file zgboke.com /home/wwwroot/zgboke.com /home/wwwbackup/zgboke.com >/dev/null 2>&1
#backup zhangge.net:
10 3 * * * /root/scripts/backup.sh db zhangge.net zhangge zhangge 123456 /home/wwwbackup/zhangge.net >/dev/null 2>&1
15 3 * * * /root/scripts/backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net >/dev/null 2>&1
不过还有一点要注意的是,百分号%是crontab中的一个特殊符号!不能直接作为参数传递!!!
解决办法很简单,使用反斜杠\转义即可:\%,假如我的密码是 123456%,那之前脚本的crontab备份代码应该是:
5 3 * * * /root//backup.sh db zhangge.net zhangge_db root 123456\% /home/wwwbackup/zhangge.net
每个网站2行,第一行备份数据库,第二行备份网站文件。
crontab参数格式为 {分 时 日 月 周 + 命令行}
所以,拿第2行来说,就是 每天的凌晨3点,执行后面的命令行,最后的>/dev/null 2>&1 表示屏蔽任何日志信息。
注意事项:脚本需要写绝对路径,比如/root/scripts/backup.sh 并且要有执行权限,可以再次执行chmod +x 来赋权
作完以上步骤之后,你的VPS已经实现了本地七天循环备份机制。下面说下同步至七牛的方法。
四、七牛远程备份
远程备份至七牛的原理,在之前的博文已经说明,不清楚的请参考:https://zhangge.net/4221.html
下面说具体做法:
①、下载我整理好的七牛同步工具包(仅提供64位):
wget http://static.zhangge.net/diy_tools/QN_Backup_tools.zip
②、将工具包解压:
unzip QN_Backup_tools.zip
解压完成后,会得到一个tools文件夹,里面有三个文件,分别为:
qrsync:七牛同步工具 (仅适合Linux64位,其他版本请点此下载相应版本替换此文件)
qrsync.conf :通用配置模版
config.sh:配置初始化辅助脚本
③、配置qrsync和计划任务
I. 会用vim 和crontab -e 的童鞋 可以无视config.sh,直接使用vim编辑qrsync.conf:
{"src":"/home/wwwbackup","dest":"qiniu:access_key=Your AK&secret_key=Your SK&bucket=bucket_name&threshold=512000","deletable":0,"debug_level":1}
修改代码中的 /home/wwwbackup 、Your AK 、Your SK、bucket_name三个参数即可。
/home/wwwbackup 表示要同步到七牛的目录,即上文七天备份的文件存放路径
Your AK:你的七牛帐号Access_key
your SK:你的七牛帐号的Secret_key
bucket_name:准备存放备份文件的七牛私人空间名字
改完后,执行crontab -e 添加如下计划任务:
#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &
Ps:代码表示每天凌晨4点同步至七牛,记得要修改qrsync和qrsync.conf的实际路径。
II. 不熟悉vim和crontab的同学,可如下执行我写好的初始化脚本:config.sh
[root@Mars_Server tools]# sh config.sh
Please input the access_key: 输入七牛access_key密钥
Please input the secret_key: 输入七牛secret_key密钥
Please input the bucket name: 输入七牛私人空间名称
Please input the backup path: 输入本地七天循环备份存放路径,比如/home/wwwbackup
#回车后将开始初始化配置,出现如下类似信息则成功:
echo =========================The crontab list===============================
...
...
#Add by QN_backup Scripts
0 4 * * * /root/tools/qrsync /root/tools/qrsync.conf >/dev/null 2>&1 &
echo =========================The crontab list===============================
configure Success!
完成以上所有步骤之后,你的vps就实现了本地七天循环备份和七牛远程备份了!
五、附加说明
①、注意事项
I. 考虑到脚本适用性,压缩时会包含文件的绝对路径,而解压时也将恢复原来的绝对路径。
比如,解压zhangge.net_7.zip,所有文件将带上备份前的路径:/home/wwwroot/zhangge.net/
看得懂脚本、又不想带路径压缩的同学,可以自行修改下,让脚本只压缩网站目录。
比如,将脚本第29行修改如下即可实现:
cd $site_path && cd ..
zip --version >/dev/null && zip -9r $back_path/$domain\_$TODAY\.zip $domain
注意网站目录名必须和输入的domain一致!看不懂脚本的,不建议修改,带了绝对路径也不影响后期手动恢复!
II. 备份文件会带有脚本执行者的权限,比如备份脚本是以root身份执行,那么这个压缩包解压后的文件的所有者和权限都是root,那么在恢复网站数据时,必须使用chmod恢复权限到当前的web使用者,比如lnmp一件安装的环境,web的使用者是www,那么解压缩备份文件后,记得执行:chown -R www:www /网站路径 恢复所有者权限,否则打开网站可能出现空白页!
③、本地备份截图:
Ps:文件中的数据表示星期几,带db的表示数据库,没带的表示网站文件,每个网站最终将有14份文件(7个数据库备份,7个网站文件备份)。
和本地数据保持一致,七牛同步工具还有一个优点,通过哈希值判断文件是否有更新,而不重复同步相同文件,所以每天的七牛同步其实只会同步当天生成的备份包。
资料来源:https://zhangge.net/4336.html