Linux系统备份从入门到实操:零基础也能掌握的完整方案
为什么需要Linux系统备份?
无论你是运行个人网站还是企业服务,Linux系统备份都是最后一道防线。
数据丢失、误删文件、硬盘故障、勒索攻击——任何意外都可能让业务中断。
与其事后慌乱,不如花半小时搭建一套靠谱的备份方案。
本文直接讲怎么操作,不扯理论,所有命令你可以直接复制到终端执行。
备份前需要准备什么?
开始之前,确认你的服务器满足以下条件:
- 已安装常用工具:
tar、rsync多数系统默认自带。如果没有,用包管理器安装: - Ubuntu/Debian:
sudo apt install tar rsync -y - CentOS/RHEL:
sudo yum install tar rsync -y - 有足够的存储空间:建议单独挂载一块磁盘(如
/backup),不要和系统盘混在一起。可用df -h查看剩余空间。 - 拥有root或sudo权限:备份系统关键目录需要高权限。
如果你使用宝塔面板,以下命令可以直接通过SSH执行,部分路径已经帮你预设好。
三种主流备份方式(附命令示例)
1. 用 tar 做全量备份
最直观的方法,将整个目录打包压缩。
例如备份 /var/www 网站数据:
sudo tar -czf /backup/www-$(date +%Y%m%d).tar.gz /var/www
这条命令会生成一个带日期的压缩包,方便按天留存。
如果要备份系统配置目录 /etc,改成对应路径即可。
2. 用 rsync 做增量备份
只复制变化的文件,适合每天定时跑。
例如将 /home 同步到备份盘:
sudo rsync -avz --delete /home/ /backup/home/
--delete 会删除备份目录中源端已不存在的文件,保持完全一致。
建议第一次先不带 --delete 运行,确认无误再加。
3. 备份 MySQL/MariaDB 数据库
使用 mysqldump 导出所有数据库:
sudo mysqldump -u root -p --all-databases > /backup/db-$(date +%Y%m%d).sql
输入密码后即可导出。
如果数据库较大,可以压缩:
sudo mysqldump -u root -p --all-databases | gzip > /backup/db-$(date +%Y%m%d).sql.gz
设置定时自动备份
手动备份不够可靠,必须用 crontab 实现自动化。
执行 crontab -e 打开任务表,加入以下示例:
# 每天凌晨3点备份网站数据和数据库
0 3 * * * tar -czf /backup/www-$(date +\%Y\%m\%d).tar.gz /var/www > /dev/null 2>&1
0 3 * * * mysqldump -u root -pYourPassword --all-databases | gzip > /backup/db-$(date +\%Y\%m\%d).sql.gz > /dev/null 2>&1
重要提醒:crontab 中 % 需要转义,否则会解析错误。
如果密码包含特殊字符,建议用配置文件保存。
或者把备份命令写成一个脚本,crontab 只调用脚本,更安全。
脚本示例(/usr/local/bin/mybackup.sh):
#!/bin/bash
# 备份网站
sudo tar -czf /backup/www-$(date +%Y%m%d).tar.gz /var/www
# 备份数据库(密码写在脚本中注意权限)
mysqldump -u root -p'YourPassword' --all-databases | gzip > /backup/db-$(date +%Y%m%d).sql.gz
然后 chmod +x /usr/local/bin/mybackup.sh,crontab 中写:
0 3 * * * /usr/local/bin/mybackup.sh
避坑指南:新手最容易犯的五个错误
- 备份文件存在同一块硬盘上:如果物理磁盘损坏,备份和数据一起丢失。必须存到不同的分区或远程服务器。
- 忘记验证备份可用性:压缩包只是文件,能不能用?至少每月解压一次看看内容是否完整。
- crontab 中路径写错:crontab 默认环境变量很少,命令尽量写绝对路径(如
/usr/bin/tar)。 - 数据库密码明文暴露:如果脚本包含密码,请设置
chmod 600且只允许root读取。 - 备份频率过高吃爆磁盘:每天全量备份会迅速填满空间。建议每周一次全量 + 每日增量(rsync)。
如何验证备份是否有效?
验证不是看文件存在,而是真正还原测试。
简单方法:
- tar包:在测试目录解压
mkdir /tmp/testrestore && cd /tmp/testrestore
tar -xzf /backup/www-20250320.tar.gz
ls -la # 检查文件结构是否正常
- 数据库:导入到测试库
mysql -u root -p testdb < /backup/db-20250320.sql
然后登录MySQL查看数据表是否正常。
- rsync备份:直接对比源与备份目录的文件数量和大小:
diff -r /home/ /backup/home/ 2>/dev/null | head -20
没有输出表示完全一致。
只有经过还原测试的备份才是可靠的。
建议至少每季度做一次完整演练。
写在最后
Linux系统备份不是一件复杂的事,只要把 tar、rsync、crontab 这三个工具用好,就能构建起自动化的备份体系。
千万不要备份完就不管了——定期检查空间、验证恢复,才能在真正出事时救你一命。
如果你刚开始接触,先按本文步骤在测试环境走一遍,再应用到生产服务器。
遇到报错先检查路径、权限和磁盘空间,大部分问题都能自己解决。