首页 > 其他分享 >LNMP 环境下使用 Zstd 压缩优化网站备份脚本

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

时间:2024-06-06 20:59:54浏览次数:15  
标签:网站 Zstd 备份 LNMP 服务器 Backup Dir

网站的备份一直都是网站运营、服务器运维中很重要的一环,明月无论是在自己的服务器还是客户的代运维服务器上都是非常重视网站备份的,尤其热衷于优化网站备份这块儿,毕竟明月自己的服务器配置一直都是最低的 1H1G 呀,就这配置常年都是 4-5 个网站放着呢!明月的博客毕竟有十来年了,单单网站文件就占用了至少 5G 了,这还不包括数据库的占用。

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

随着网站文件的日积月累,LNMP 环境下网站备份脚本的运行效率是越来越吃力了,以前都是每天一次备份的,现在因为备份期间服务器负载飙升相当恐怖都改成一周一次备份了:

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

有图有真相,备份期间明月服务器的负载(load avvrage)情况实时截图

这个负载值已经严重影响备份期间网站的正常访问了,甚至会出现 503、502 等错误,反正每次备份期间,明月是不敢去访问网站的,并且这个过程持续的时间一般都在 2-3 个小时左右,很明显这不科学呀。

经过对 LNMP 环境下网站备份脚本 backup.sh 代码的分析,发现造成备份期间服务器负载持续飙升的罪魁祸首是备份时的压缩算法 gzip,上面的截图里就可以看到备份期间 gzip 的进程占据了很多,明月简单统计了一下能有 20-30 多个 gzip 进程,压缩是需要大量的 CPU 运算和内存的,明月服务器的 1H1G 很明显是承受不了这么“蹂躏”的,是时候给网站备份脚本更换压缩算法了。这时候看到了一则旧闻:

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

这个 Zstd 压缩算法真的是太牛逼了,Linux 内核组件都在用了,那要是拿来用在网站备份上也不知道是个啥效果,于是果断施展搜索大法一番了解后得出结论完全没有问题的,于是就诞生了【Zstd(Zstandard)助力网站备份利器】的运维学习笔记,又因为实操发现有了【更新 tar 命令到最新版本】笔记,先在自己服务器上调试一番后终于成功实现了用 Zstd 压缩算法网站备份,马上给一个客户的服务器也用上了,效果非常的好,备份结果对比一下也是非常的满意:

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

上图左边是 gzip 压缩算法备份的网站文件和数据库导出的 sql 大小,右边是采用 Zstd 压缩算法后备份产生的文件大小

虽然对比网站文件在大小上没有很明显的差异,这主要是因为服务器硬件配置和压缩参数的问题,可以进行调优来改善的,明月最喜欢的是采用 Zstd 压缩算法后备份期间的服务器负载表现都快亮瞎眼了:

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

这是明月自己 1H1G 服务器备份期间的负载实时截图

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

这是客户服务器(1H2G,老薛海外云主机)备份期间的负载实时截图

这负载直接下降了近十倍呀,太神奇了吧!哈哈!并且明月持续观察了很长一段时间,都是这个状态,波动也都是维持在个位数而已,备份期间完全不影响网站的访问、登录等等,并且整体的备份耗时至少缩减了一倍还多,整个备份期间无论是前端还是后端都是毫无感受,看来明月这 1H1G 配置的服务器还能再挺几年是没有问题的了!完美!!!

又在多个不同客户、不同地域、不同硬件配置、不同服务器生产环境上测试后,实测证明 Zstd 压缩算法的强大真不是盖的的,Linux 内核都采用了可见一斑!好了,废话不多说了,下面给大家分享一下明月的这个 Zstd 压缩算法的网站备份脚本代码:

要在服务器上用 Zstd 压缩算法有两个必备条件:

上述两个条件是必备的,否则下面的脚本是没法执行的哦!

这里我们以军哥 LNMP 一键安装包里的网站备份脚本 backup.sh 为例,里面原本的压缩备份打包文件的代码如下:

TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql
OldWWWBackup=www-*-$(date -d -3day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -3day +"%Y%m%d").sql

Backup_Dir()
{
    Backup_Path=$1
    Dir_Name=`echo ${Backup_Path##*/}`
    Pre_Dir=`echo ${Backup_Path}|sed 's/'${Dir_Name}'//g'`
    tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
}
Backup_Sql()
{
    ${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql
}

只需要对照修改成下面代码即可:

TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.zst
TodayDBBackup=db-*-$(date +"%Y%m%d").sql.zst
OldWWWBackup=www-*-$(date -d -1day +"%Y%m%d").tar.zst
OldDBBackup=db-*-$(date -d -1day +"%Y%m%d").sql.zst

Backup_Dir()
{
    Backup_Path=$1
    Dir_Name=`echo ${Backup_Path##*/}`
    Pre_Dir=`echo ${Backup_Path}|sed 's/'${Dir_Name}'//g'`
    tar '-I zstd -19 -T0' -cf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.zst -C ${Pre_Dir} ${Dir_Name}
}
Backup_Sql()
{
    ${MySQL_Dump} -u$MYSQL_UserName -p$MYSQL_PassWord $1 | zstd -19 -T0 > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql.zst
}

完成后,保存退出即可,想测试了也可以直接备份一下实测对比一下结果,其中上述代码里 zstd 命令后面的参数可以根据自己的服务器硬件配置进行调整的会有意想不到的效果的哦!

参数:-19

指的是压缩等级为 19,这是目前默认最高的,效果取决于你的内存了,内存越多效果越好。

参数: -T0

指的是压缩的时候使用所有 CPU,会影响压缩比的哦,比如你是 4H 的 CPU 就是 -T4,其他配置一次类推即可。
 

LNMP 环境下使用 Zstd 压缩优化网站备份脚本

上图就是一个 8H 服务器备份期间负载截图,结果是 4G 的网站文件压缩到了 2.5G,很牛逼的压缩比了!

目前,明月所有代运维的服务器都已经采用 Zstd 压缩算法网站备份了,毕竟效果那是真的没的说,看来明月很有必要给军哥 LNMP 一键安装包也建议一下对 Zstd 的支持了,毕竟独乐乐不如众乐乐呀!先分享给有需要的站长朋友再说了!

标签:网站,Zstd,备份,LNMP,服务器,Backup,Dir
From: https://blog.csdn.net/cpublic/article/details/139421900

相关文章

  • 学习笔记——路由网络基础——浮动静态路由(路由备份和冗余)
    2、浮动静态路由(路由备份和冗余)(1)基本概念浮动静态路由是两条或多条链路组成浮动路由。当到达某一网络有多条路径,通过为静态路由设置不同的优先级,你可以指定主用路径和备用路径。当主用路径不可用时,走备用路径的静态路由进入路由表,数据包通过备用路径转发到目标网络,这就是......
  • windows下定时备份数据库
    一、windows计划任务程序执行编写.bat脚本@echooffecho设置MySQL数据库的连接信息sethost=127.0.0.1setport=3306setuser=rootsetpass=123456echo设置要备份的MySQL数据库名称setdbname=test_tableecho获取当天的日期格式,例如:20221102231300REM获取......
  • mysql数据备份和还原知识点
    MySQL数据备份和还原是数据库管理的关键操作,确保数据的安全性和可恢复性。以下是关于MySQL备份和还原的一些关键知识点:1、数据备份    1.1、mysqldump工具:                mysqldump是MySQL提供的一个命令行实用程序,用于创建数据库或表的结构以......
  • 使用Python实现MySQL数据库备份
    数据库备份的重要性数据库备份是一项至关重要的任务,它可以帮助我们应对各种意外情况,如硬件故障、数据损坏、误操作等。通过定期备份数据库,我们可以保证数据的安全性,同时在发生意外时能够快速恢复数据,最大限度地减少业务影响和数据丢失。使用Python实现MySQL数据库备份使......
  • 使用powershell脚本,自动压缩文件夹,实现备份功能
    担心数据丢失?教你3分钟实现自动压缩,备份文件夹。最近在使用obsidian,想要在多台电脑上访问一个同一个仓库,所以我把obsidian-vault设置在了mac-mini的共享文件夹上。但是有一个问题,mac-mini上边的硬盘是我的闲置硬盘,随时都可能挂掉。一、通过脚本自动备份为了避免obsidian......
  • MySQL5.7 通过逻辑备份迁移到GreatSQL注意事项
    一、背景概述在将数据库从MySQL5.7迁移到GreatSQL8.0.32时,由于数据量较小且关注安全性,决定使用mysqldump执行逻辑备份,并将数据导入GreatSQL。但在备份时采用了备份全库(--all-databases)的方式,在导入GreatSQL后,修改用户密码时出现错误。这是因为mysqldump备份时包括了mysql系统......
  • 【Zstd: 压缩全能王】
    什么是Zstdzstd是Facebook在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。效果对比压缩率与压缩速度,此图来源Zstd官网,为一些经典的压缩算法对比,CompressornameRatioCompressionDecompress.zstd1.5.6-12.887510MB/s1580MB/shttps://www.zl......
  • LNMP网站架构部署
     目录一、LNMP架构部署(源码编译安装)①实验准备②安装nginx服务③安装mysql服务,配置文件④安装php服务,修改配置文件⑤验证静态页面测试访问动态页面测试访问调用数据库测试二、LNMP架构应用实例1.论坛网站应用①nginx服务器上传压缩包并解压 ②php服务器上修改论......
  • PowerShell实现定时备份并清理文件夹数据
    脚本backup.ps1#设置执行策略以允许脚本运行Set-ExecutionPolicyBypass-ScopeProcess-ForceWrite-Host"正在备份文件,请勿关闭...."#设置源目录和目标备份目录#备份源文件路径$SOURCE_DIR="D:\data\app\images"#备份目标路径$BACKUP_DIR="D:\data\backup"$......
  • Azure SQL 备份无法还原至新服务器
    我正在为我的Azure应用程序创建一个简单的灾难恢复计划。该应用程序的RTO长达一周,因此它不是一个关键应用程序,所以我不需要设置主动/被动服务器或任何类型的自动故障转移。如果数据中心断电六个小时,我也不在乎。实际上,我只是为某些导致整个数据中心离线的事件(如火灾......