sql server backup database
在 SQL Server 中,BACKUP DATABASE 命令是用于创建数据库备份的核心工具,是数据保护和灾难恢复最关键的手段。
下面我会从最基础的完整备份讲起,逐步涵盖差异备份、事务日志备份,以及一些重要的实践建议。
1. 核心命令:完整备份 (Full Backup)
完整备份会备份整个数据库的所有数据,是其他所有备份类型的基础。
BACKUP DATABASE [你的数据库名]
TO DISK = 'D:\Backups\你的数据库名_Full_YYYYMMDD.bak'
WITH INIT, -- 覆盖现有备份文件,而非追加
COMPRESSION, -- 压缩备份,节省空间,建议始终使用
STATS = 5; -- 每完成5%显示一个进度信息
2. 差异备份 (Differential Backup)
差异备份只备份自上一次完整备份以来所有发生变化的数据。它比完整备份快得多,并且可以大大减少恢复数据时需要应用的事务日志数量。
-- 前提:必须先存在一个完整备份
BACKUP DATABASE [你的数据库名]
TO DISK = 'D:\Backups\你的数据库名_Diff_YYYYMMDD.bak'
WITH DIFFERENTIAL, -- 指定进行差异备份
COMPRESSION,
STATS = 5;
3. 事务日志备份 (Transaction Log Backup)
事务日志备份备份的是自上一次事务日志备份(如果没有,则从上一次完整或差异备份)之后发生的所有事务记录。它允许你执行时间点恢复(例如恢复到某个误操作发生前的5分钟)。
-- 前提:数据库恢复模式必须是“完整”或“大容量日志”
BACKUP LOG [你的数据库名]
TO DISK = 'E:\LogBackups\你的数据库名_Log_YYYYMMDD_HHMMSS.trn'
WITH COMPRESSION, STATS = 5;
重要提示:如果数据库的恢复模式是“简单”,则不能使用
BACKUP LOG命令。
4. 恢复模式与备份策略的关联
你选择的恢复模式直接决定了你能做哪些类型的备份,以及如何进行恢复。
| 恢复模式 | 支持的操作 | 数据安全 | 日志空间管理 | 适用场景 |
|---|---|---|---|---|
| 完整 | 完整、差异、日志 | 最高:可恢复到任意时间点 | 需要定期备份日志,否则日志文件会持续增长,直至空间写满 | 生产环境、重要业务系统 |
| 大容量日志 | 完整、差异、日志 | 较高:无法恢复到特定时间点,只能恢复到日志备份结尾 | 批量操作(如 SELECT INTO)日志较小,性能好。日志备份后日志空间不会自动收缩 |
数据仓库,或批量操作频繁的数据库 |
| 简单 | 完整、差异 | 最低:只能恢复到完整/差异备份结尾 | 自动管理:每次检查点后自动截断日志,日志文件很小 | 开发、测试、只读或可重建的系统 |
5. 一个可靠的生产环境备份策略示例
对于生产数据库,建议的备份策略如下:
- 恢复模式:设置为 “完整”。
- 完整备份:每周一次(例如周日凌晨 1:00)。
- 差异备份:每天一次(例如周一至周六的凌晨 1:00)。
- 事务日志备份:高频率执行(例如每 15 或 30 分钟一次)。
这样配置的好处是,一旦发生灾难,你最多只会丢失 15-30 分钟的数据,并且恢复速度相对较快(先还原完整备份,接着还原最新的差异备份,最后依次还原差异备份之后的所有日志备份)。
6. 最佳实践与重要提醒
- 备份到不同的物理设备:绝对不要将备份文件存储在数据库文件所在的同一块硬盘上。应存储到另一块物理磁盘、NAS 或云存储上。
- 验证备份:定期使用
RESTORE VERIFYONLY命令检查备份文件的完整性,或直接在测试环境进行一次完整的恢复演练。 - 使用压缩:SQL Server 2008 及更高版本支持备份压缩,能节省 60-80% 的磁盘空间,并通常能提高备份速度。
- 管理备份历史:备份文件会持续累积并占满磁盘。可以编写维护计划或脚本,自动删除 30 天或 90 天前的旧备份文件。
- 加密备份:从 SQL Server 2014 开始,可以使用
BACKUP DATABASE ... WITH ENCRYPTION对备份文件进行加密,防止备份文件被盗后数据泄露。
7. 常用辅助命令
-
查看备份历史
-- 查看特定数据库的所有备份记录 SELECT * FROM msdb.dbo.backupset WHERE database_name = '你的数据库名' ORDER BY backup_finish_date DESC; -
验证备份文件是否有效
RESTORE VERIFYONLY FROM DISK = 'D:\Backups\你的数据库名_Full_20250101.bak'; -
查看备份文件内容
-- 查看备份文件里包含了哪些备份集 RESTORE HEADERONLY FROM DISK = 'D:\Backups\你的数据库名_Full_20250101.bak';
总结
- 日常维护:对于绝大多数生产数据库,将恢复模式设为 “完整”,并建立“每周完整备份 + 每天差异备份 + 高频日志备份”的策略。
- 安全底线:请务必确保备份文件和数据库文件不在同一物理磁盘上。
- 简单场景:对于开发库或测试库,使用 “简单” 恢复模式,只做完整备份即可,这样管理成本最低。
如果你需要了解如何还原这些备份文件,可以告诉我,我可以为你详细解释 RESTORE DATABASE 的命令和步骤。
网站:http://shibowl.top
github:https://github.com/hanbinjxnc
博客园:https://www.cnblogs.com/hool
博客:https://blog.shibowl.top
淘宝店:https://boxunwl.taobao.com/
作者:世博 2019年4月28日----
github:https://github.com/hanbinjxnc
博客园:https://www.cnblogs.com/hool
博客:https://blog.shibowl.top
淘宝店:https://boxunwl.taobao.com/
作者:世博 2019年4月28日----
浙公网安备 33010602011771号