编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

使用shell 定时备份网站数据(shell备份文件命令)

wxchong 2024-10-17 17:04:12 开源技术 12 ℃ 0 评论

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".

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表