网站首页 > 开源技术 正文
01 前言
服务器无论大小,数据都是异常重要和珍贵的。定时备份是一个好习惯,我也为我每个客户和我自己的每一台服务器都使用上shell 脚本进行定时备份,下面我来解释下我的小脚本。
02 定义变量
#sql 服务器地址,请根据实际情况进行修改
sql_host_addr=127.0.0.1
#数据库用户名,请根据需要进行修改
mysql_username=root
#数据库密码,请根据需要进行修改
mysql_passwd=mysql_password
#ftp 服务器域名或ip,请根据需要进行修改
ftp_addr=foo.com or 222.222.222.222
#ftp 用户名,请根据需要进行修改
ftp_username=your_ftp_username
#ftp密码,请根据需要进行修改
ftp_passwd=your_ftp_password
#ftp 目录路径,请根据需要进行修改
ftp_folder=/
#网站数据目录,请根据需要进行修改
web_file_folder=/usr/local/html
#zip 文件的压缩密码,请根据需要进行修改
zip_passwd=your_zip_passwd
#zip 文件名,请勿更改!!!!
backup_file_name=$(date +%Y%m%d).zip
#备份文件存放位置,请根据需要进行修改
backup_file_addr=/usr/local/backup
03 新建与删除
新建当天的备份文件夹,文件夹以当天的日期命名。删除3天前的数据,仅保留昨天和前天的。
#新建文件夹,我的备份文件存放在$backup_file_addr 目录中,请根据需要自行更改
mkdir -p $backup_file_addr/$(date +%Y%m%d)/mysql_dump
#删除本地3天前的数据
rm -rf $backup_file_addr/$(date -d -3day +"%Y%m%d").zip
04 备份数据库
数据库是这个脚本里最复杂的地方了,首先进入当天的备份文件夹的mysql_dump 目录,通过SHOW DATABASES 获得所有库名称,再通过for 历遍使用mysqldump 导出所有数据库。每导出一个数据库即将其通过 | 管道传递给gzip 压缩。
#进入mysql_dump 文件夹
cd $backup_file_addr/$(date +%Y%m%d)/mysql_dump
#导出数据库,通过历遍数据库,将各个数据库分别压缩
##-B 不使用历史文件,禁止交互动作
##-N 不输出列名称,因为列名称不是一个数据库
##-e 执行命令并退出
##将mysql 输出的内容通过管道 | 传递给xargs ,xargs 将所有换行替换为空格,以便历遍
##通过mysqldump 对xargs 修改过后的数据库进行dump 并使用gzip 压缩
for db in `/usr/bin/mysql -h 127.0.0.1 -u$mysql_username -p$mysql_passwd -B -N -e 'SHOW DATABASES' | xargs`; do
(/usr/bin/mysqldump -u$mysql_username -p$mysql_passwd ${db} | gzip -9 - > ${db}.sql.gz)
done
#进入文件夹$backup_file_addr/$(date +%Y%m%d)
cd ..
05 复制网站数据
#将网站数据复制到$backup_file_addr/$(date +%Y%m%d)/web_file
cp -r $web_file_folder ./web_file
#进入文件夹$backup_file_addr/$(date +%Y%m%d)
cd ..
06 压缩
#使用zip 压缩文件夹
zip -r -9 -P $zip_passwd $backup_file_addr/$backup_file_name $(date +%Y%m%d)
#删除临时文件夹,仅保留压缩文件
rm -rf $(date +%Y%m%d)
07 上传到备份空间
我这里使用了lftp ,请通过以下命令安装:
yum install lftp -y
推荐备份到百度云,关于bypy 的教程请通过以下链接查看:
#上传到FTP空间
lftp -u $ftp_username,$ftp_passwd $ftp_addr << END
put $backup_file_name
bye
END
#或上传到百度盘
/usr/bin/python /usr/local/shell/bypy/bypy.py syncup $backup_file_addr/ test_addr/
10 定时任务
将脚本通过crontab 定时执行:
#每天3点30分定时以root 身份执行backup.sh
30 3 * * * root /usr/local/shell/backup.sh
011 结语
如果你的数据库服务器包含有重要数据或者数据量特别巨大,上面的方法可能不适用于你。但上面的方法对我们这种小站点确实有帮助,我这服务器上运行着不止一个网站,但网站都是我的。即时如此,也不应该对数据的安全性掉以轻心。
想要完整版的shell 脚本请关注我的头号,私信回复"shell".
猜你喜欢
- 2024-10-17 DockerFile文件详解(dockerfile sh)
- 2024-10-17 复制!粘贴!搞定!Lierda Theland OS来了!
- 2024-10-17 Linux学习日志20090310(linux learn)
- 2024-10-17 RedHat Linux 7安装CentOS 7 yum源的安装步骤
- 2024-10-17 成为合格的Linux运维工程师必备技能:
- 2024-10-17 一套五星级酒店智能化系统设计说明书
- 2024-10-17 ftp终端中下载orerilly子目录下所有到本地目录中
- 2024-10-17 安服仔偷懒必备技能之自动化主机检查脚本
- 2024-10-17 Linux之RedHat7如何更换yum源(redhat更换centos yum源)
- 2024-10-17 Windows下使用GIT管理推送FTP代码
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)