| 策略 | 频率 | 保留 | 适用数据 |
|---|---|---|---|
| 全量备份 | 每周 | 4周 | 所有数据 |
| 增量备份 | 每天 | 7天 | 变化数据 |
| 差异备份 | 每天 | 7天 | 相对全量的变化 |
| 实时复制 | 持续 | 取决于存储 | 关键数据 |
# tar备份
tar czf /backup/data-$(date +%Y%m%d).tar.gz /data/
# rsync增量同步
rsync -avz --delete /data/ /backup/data/
# 远程备份
rsync -avz -e ssh /data/ user@backup-server:/backup/data/
# 数据库备份
mysqldump -u root -p --all-databases | gzip > /backup/mysql-$(date +%Y%m%d).sql.gz
# pg_dump
pg_dump -U postgres dbname | gzip > /backup/pg-$(date +%Y%m%d).sql.gz
#!/bin/bash
# backup.sh - 自动备份脚本
set -euo pipefail
BACKUP_DIR="/backup"
RETENTION_DAYS=30
LOG="/var/log/backup.log"
log() { echo "[$(date '+%F %T')] $*" | tee -a "$LOG"; }
# 数据库备份
backup_mysql() {
local dump="$BACKUP_DIR/mysql-$(date +%Y%m%d_%H%M%S).sql.gz"
mysqldump --all-databases --single-transaction | gzip > "$dump"
log "MySQL备份完成: $dump ($(du -sh "$dump" | cut -f1))"
}
# 文件备份
backup_files() {
local tar="$BACKUP_DIR/files-$(date +%Y%m%d_%H%M%S).tar.gz"
tar czf "$tar" /data/ /etc/ /home/
log "文件备份完成: $tar ($(du -sh "$tar" | cut -f1))"
}
# 清理旧备份
cleanup() {
find "$BACKUP_DIR" -name "*.gz" -mtime +"$RETENTION_DAYS" -delete
log "清理${RETENTION_DAYS}天前的备份"
}
# 执行
backup_mysql
backup_files
cleanup
log "备份任务完成"
# 恢复MySQL
gunzip < /backup/mysql-20240115.sql.gz | mysql -u root -p
# 恢复文件
tar xzf /backup/files-20240115.tar.gz -C /
# 验证恢复
md5sum /data/important.file
diff /data/important.file /backup/important.file
# 1. 创建测试备份
tar czf /tmp/test-backup-$(date +%Y%m%d).tar.gz /etc/hosts /etc/hostname
# 2. 验证备份内容
tar tzf /tmp/test-backup-*.tar.gz
# 3. 恢复测试
mkdir -p /tmp/restore-test
tar xzf /tmp/test-backup-*.tar.gz -C /tmp/restore-test
diff /etc/hosts /tmp/restore-test/etc/hosts✅ 理解备份策略
✅ 掌握tar/rsync备份
✅ 学会数据库备份
✅ 掌握恢复操作
| 书名 | 作者 | 重点 |
|---|---|---|
| Linux命令行与Shell脚本编程大全 | Blum | Shell脚本全面覆盖 |
| UNIX/Linux系统管理技术手册 | Nemeth | 系统管理圣经 |
| Ansible: Up and Running | Lintner | Ansible实战 |
| 鸟哥的Linux私房菜 | 鸟哥 | 中文经典入门 |
| 认证 | 机构 | 级别 |
|---|---|---|
| LFCS | Linux Foundation | 基础系统管理 |
| LFCE | Linux Foundation | 高级系统工程师 |
| RHCSA | Red Hat | Red Hat管理员 |
| RHCE | Red Hat | Red Hat工程师 |
| CKA/CKAD | CNCF | Kubernetes管理员/开发者 |
# 文本处理速查
grep -E 'pattern' file # 扩展正则搜索
sed -i 's/old/new/g' file # 替换
awk '{print $1}' file # 提取列
sort | uniq -c | sort -rn # 频次统计
cut -d: -f1 file # 切列
tr 'A-Z' 'a-z' # 转小写
# 系统管理速查
systemctl status/start/stop/restart service
journalctl -u service -f # 跟踪日志
df -h / du -sh * # 磁盘使用
ps aux --sort=-%mem # 内存排序
ss -tlnp # 监听端口
iptables -L -n # 防火墙规则
crontab -e # 编辑定时任务
useradd -m -s /bin/bash user # 创建用户
# 网络诊断速查
ip addr / ip route # 网络配置
ping / traceroute # 连通测试
dig / nslookup # DNS查询
curl -I url # HTTP头检查
nc -zv host port # 端口测试
tcpdump -i eth0 port 80 # 抓包
$ rsync --version | head -1
rsync version 3.2.7 protocol version 31
$ which mysqldump 2>/dev/null || echo 'mysql-client未安装'
mysql-client未安装
# S3备份
aws s3 sync /data/ s3://backup/data-$(date +%Y%m%d)/
# GPG加密
tar czf - /data/ | gpg -e -r admin@example.com > backup.gpg
# 恢复
gpg -d backup.gpg | tar xzf - -C /
# DR检查清单:
# - 备份是否自动+监控?
# - 是否加密? 密钥安全?
# - 季度恢复测试?
# - RTO/RPO是否达标?
# - 异地/云备份?
# - 人员是否有恢复权限?
在实际生产环境中,数据保护与合规是系统管理员必须深入掌握的核心能力。本节将探讨常见场景、最佳实践和避坑指南。
开发环境和生产环境的差异是脚本出错的常见原因。建议:
优化策略:
改善方法:
#!/bin/bash
# 数据保护与合规最佳实践模板
set -euo pipefail
# 1. 参数校验
[[ $# -lt 1 ]] && echo "Usage: $0 <arg>" >&2 && exit 1
# 2. 环境检查
require_cmd() {
command -v "$1" >/dev/null || { echo "需要: $1" >&2; exit 1; }
}
# 3. 清理机制
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
# 4. 日志记录
log() { echo "[$(date +%T)] $*"; }
err() { log "ERROR: $*" >&2; exit 1; }
# 5. 主逻辑
main() {
log "开始处理: $1"
# 业务逻辑
log "处理完成"
}
main "$@"
# 文件操作
ls -la # 详细列表
find / -name "*.conf" 2>/dev/null # 查找文件
ln -s target link # 符号链接
du -sh * | sort -rh # 目录大小排序
# 文本处理
grep -rn "pattern" dir/ # 递归搜索
sed -i.bak 's/old/new/g' f # 备份替换
awk -F: '{print $1}' file # 提取列
sort file | uniq -c # 去重计数
# 系统管理
systemctl status/start/stop/restart service
journalctl -u service -f # 实时日志
ps aux --sort=-%mem # 内存排序
ss -tlnp # 监听端口
crontab -e # 定时任务
# 网络诊断
ip addr/route/show # 网络配置
ping/traceroute # 连通测试
dig/nslookup # DNS查询
curl -I url # HTTP检查
nc -zv host port # 端口测试
# 磁盘管理
df -h # 磁盘使用
fdisk -l # 分区信息
mkfs.ext4 /dev/sdb1 # 格式化
mount /dev/sdb1 /mnt # 挂载
blkid # UUID查看
本章内容是Linux系统管理课程的重要组成部分。掌握这些知识需要大量的实践操作,建议在虚拟机或云服务器上反复练习。记住:纸上得来终觉浅,绝知此事要躬行。
在实际工作中,遇到问题时:
A: 从简单的Ad-hoc命令开始,逐步编写Playbook,最后组织为Role。在实践中学习最有效。
A: 1)先在staging验证 2)使用--check预演 3)确保有回滚方案 4)监控部署后状态
A: 1)查看ansible日志定位失败任务 2)手动修复或回滚 3)修复Playbook 4)重新执行
A: 使用声明式模块(apt/yum/service/file)而非命令式(command/shell)。
A: 使用Ansible Vault加密变量文件,密钥与代码分离存储。
# 核心概念对照表
声明式 vs 命令式:
声明式: 描述"要什么" → apt: name=nginx state=present
命令式: 描述"做什么" → command: apt install nginx
幂等性: 同一操作执行多次,结果一致
apt: name=nginx state=present # 已安装则不操作
command: apt install nginx # 可能重复安装
收敛: 使系统达到期望状态的过程
检测当前状态 → 计算差异 → 执行变更 → 验证结果
不可变基础设施:
不修改运行中的系统,而是重建
容器/AMI/镜像方式部署
本课程内容持续更新,欢迎反馈改进建议。掌握Linux系统管理需要持续学习和实践,祝你在运维之路上不断进步!🚀