mariadb数据库备份与恢复-数据一条都不能少
数据库备份与恢复是数据安全的最后一道防线。其必要性不仅在于防御风险,更是持续服务和数据资产保值的核心保障。数据面临的威胁:
- 硬件故障:硬盘损坏、服务器宕机等物理问题可能导致数据无法访问。
- 软件缺陷:数据库软件或应用系统的漏洞可能破坏数据完整性。
- 人为误操作:误删表(如 DROP TABLE)、错误更新(如 UPDATE 不加条件)等操作难以回滚。
一、备份方法
1. 逻辑备份(mysqldump)
适用场景:中小型数据库、需跨版本迁移、恢复单个表。
步骤:
# 备份单个数据库
mysqldump -u 用户名 -p 数据库名 > backup.sql
# 备份所有数据库(含系统库)
mysqldump -u 用户名 -p --all-databases > full_backup.sql
# 仅备份表结构(不含数据)
mysqldump -u 用户名 -p --no-data 数据库名 > schema.sql
# 压缩备份文件
mysqldump -u 用户名 -p 数据库名 | gzip > backup.sql.gz
参数说明:
--single-transaction:InnoDB 表使用事务保证备份一致性(适合在线备份)。
--routines:包含存储过程和函数。
--events:包含事件调度器任务。
2. 物理备份(文件系统快照)
适用场景:大型数据库、快速备份恢复。
工具:mariabackup(MariaDB 官方工具,支持热备份)。
步骤:
# 安装 mariabackup
sudo apt-get install mariadb-backup
# 全量备份
sudo mariabackup --backup --target-dir=/path/to/backup --user=用户名 --password=密码
# 准备备份(使数据一致)
sudo mariabackup --prepare --target-dir=/path/to/backup
3. 增量备份
适用场景:减少全量备份频率,节省存储空间。
步骤:
# 首次全量备份
mariabackup --backup --target-dir=/backup/full
# 增量备份(基于全量备份)
mariabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full
# 合并增量备份到全量
mariabackup --prepare --apply-log-only --target-dir=/backup/full
mariabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc1
二、恢复方法
1. 从逻辑备份恢复
# 恢复单个数据库
mysql -u 用户名 -p 数据库名 < backup.sql
# 恢复所有数据库
mysql -u 用户名 -p < full_backup.sql
# 解压后恢复
gunzip < backup.sql.gz | mysql -u 用户名 -p 数据库名
2. 从物理备份恢复
使用 mariabackup 恢复。
# 恢复备份
sudo systemctl stop mariadb
sudo rm -rf /var/lib/mysql/*
sudo mariabackup --copy-back --target-dir=/path/to/backup
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mariadb
3. 时间点恢复(Point-in-Time Recovery)
适用场景:恢复误删数据到指定时间点(需启用二进制日志)。
步骤:
# 1. 恢复最近的全量备份
mysql -u root -p < full_backup.sql
# 2. 重放二进制日志到误操作前
mysqlbinlog --start-datetime="2024-05-29 00:00:00" --stop-datetime="2024-05-29 14:30:00" /var/lib/mysql/mariadb-bin.000001 | mysql -u root -p
三、自动化备份
1. 定时任务(Cron)
# 编辑 cron 任务
crontab -e
# 每天凌晨2点全量备份
0 2 * * * /usr/bin/mysqldump -u 用户名 -p密码 数据库名 > /backup/daily_backup.sql
# 每周日凌晨2点压缩备份
0 2 * * 7 gzip /backup/daily_backup.sql
2. 备份验证
# 检查备份文件完整性
grep "Dump completed" backup.sql
# 模拟恢复测试(可选)
mysql -u root -p test_db < backup.sql
四、注意事项
- 备份存储:
- 异地保存至少3份备份(本地、云存储、离线介质)。
- 加密敏感备份文件(如使用 openssl enc)。
- 一致性:
- 备份期间避免执行 ALTER TABLE 等DDL操作。InnoDB 表使用 --single-transaction 参数。
- 监控:
- 定期检查备份日志和文件大小。使用监控工具(如 Nagios)报警备份失败。