为什么备份很重要

数据库备份是企业数据安全的最后一道防线,能够:

  • 防止硬件故障、误操作导致的数据丢失
  • 满足合规要求(等保、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

重要: 定期验证备份可以正常恢复,不要等到真正需要时才发现备份损坏。