为什么备份很重要
数据库备份是企业数据安全的最后一道防线,能够:
- 防止硬件故障、误操作导致的数据丢失
- 满足合规要求(等保、GDPR 等)
- 支持灾难恢复,保障业务连续性
- 为测试环境提供真实数据
三种备份类型
| 类型 | 说明 | 优点 | 缺点 |
|---|---|---|---|
| 全量备份 | 完整数据库副本 | 恢复简单 | 耗时长,占用空间大 |
| 增量备份 | 上次备份后的变更 | 速度快,空间小 | 恢复需要按顺序应用所有增量 |
| 差异备份 | 上次全量备份后的所有变更 | 恢复比增量简单 | 随时间增长,空间占用增加 |
mysqldump 使用
全库备份
mysqldump -u root -p \
--single-transaction \
--all-databases \
--master-data=2 \
> full_backup_$(date +%Y%m%d_%H%M%S).sql
单库备份
mysqldump -u root -p --single-transaction mydb > mydb_$(date +%Y%m%d).sql
只备份表结构
mysqldump -u root -p --no-data mydb > mydb_schema.sql
只备份数据
mysqldump -u root -p --no-create-info mydb > mydb_data.sql
压缩备份
mysqldump -u root -p mydb | gzip > mydb_$(date +%Y%m%d).sql.gz
XtraBackup(物理备份)
适合大数据量场景,支持热备份(不锁表):
# 安装
yum install percona-xtrabackup-80 -y
# 全量备份
xtrabackup --backup --user=root --password=your_password \
--target-dir=/backup/full/
# 准备备份(恢复前必须执行)
xtrabackup --prepare --target-dir=/backup/full/
# 恢复
systemctl stop mysql
xtrabackup --copy-back --target-dir=/backup/full/
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql
自动化备份脚本
#!/bin/bash
# /usr/local/bin/mysql_backup.sh
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
mkdir -p $BACKUP_DIR
# 执行备份
mysqldump -u root -p"your_password" \
--single-transaction \
--all-databases \
| gzip > $BACKUP_DIR/full_$DATE.sql.gz
# 删除超过保留期的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "备份完成:$BACKUP_DIR/full_$DATE.sql.gz"
配置定时任务
# 每天凌晨 2 点执行备份
echo "0 2 * * * root /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1" \
>> /etc/crontab
恢复数据
# 从 mysqldump 备份恢复
mysql -u root -p < full_backup_20241001.sql
# 从压缩备份恢复
gunzip < full_backup_20241001.sql.gz | mysql -u root -p
重要: 定期验证备份可以正常恢复,不要等到真正需要时才发现备份损坏。