在Windows系统中,使用CMD命令备份数据库是运维和开发人员常用的操作,尤其对于MySQL、SQL Server等主流数据库,通过命令行工具可以高效完成备份任务,以下将详细介绍不同数据库的CMD备份方法、操作步骤及注意事项,帮助用户全面掌握这一技能。

MySQL数据库备份
MySQL数据库可通过mysqldump工具在CMD中进行备份,该工具支持完整备份、单表备份、结构备份或数据备份等多种模式,基本语法为mysqldump -u用户名 -p密码 数据库名 > 备份文件路径,备份名为testdb的数据库到D盘根目录,命令为mysqldump -uroot -p123456 testdb > D:\testdb_backup.sql,执行后会提示输入密码,输入正确后即可开始备份,若需压缩备份文件,可在命令后添加| gzip > D:\testdb_backup.sql.gz,减少存储空间占用,对于大型数据库,建议使用--single-transaction参数避免锁表,确保业务正常运行,通过--where条件可指定备份特定数据,如mysqldump -uroot -p testdb orders --where="order_date>'2023-01-01'" > D:\recent_orders.sql。
SQL Server数据库备份
SQL Server数据库可通过sqlcmd工具结合T-SQL命令实现备份,基本步骤包括:首先以管理员身份打开CMD,使用sqlcmd -S 服务器名 -U 用户名 -P 密码连接数据库,然后执行BACKUP DATABASE 数据库名 TO DISK = '备份文件路径'命令,备份SalesDB到D盘,命令为BACKUP DATABASE SalesDB TO DISK = 'D:\SalesDB.bak',若需加密备份文件,可添加WITH ENCRYPTION BY PASSWORD = '密码'参数,对于差异备份(仅备份自上次完整备份后的变化),使用BACKUP DATABASE SalesDB TO DISK = 'D:\SalesDB_diff.bak' WITH DIFFERENTIAL,值得注意的是,SQL Server备份文件需确保存储路径有足够权限,且备份前需检查数据库是否处于单用户模式,避免冲突。
PostgreSQL数据库备份
PostgreSQL数据库可通过pg_dump工具在CMD中备份,该工具支持自定义输出格式(如纯文本、自定义归档、目录格式等),基本命令为pg_dump -U 用户名 -f 备份文件路径 数据库名,备份userdb数据库到D盘,命令为pg_dump -U postgres -F c -f D:\userdb_backup.dump userdb,其中-F c指定自定义归档格式,适合大容量数据备份,若需备份整个集群(包括所有数据库),则使用pg_dumpall命令,如pg_dumpall -U postgres > D:\all_databases_backup.sql,PostgreSQL备份时需确保用户具有足够权限,且建议在低峰期执行,减少对性能的影响。
MongoDB数据库备份
MongoDB作为NoSQL数据库,可通过mongodump工具在CMD中进行逻辑备份,基本语法为mongodump --host 服务器地址 --port 端口 --db 数据库名 --out 备份目录路径,备份本地logdb数据库到D盘,命令为mongodump --db logdb --out D:\mongodb_backup,若需备份远程数据库,可添加--username和--password参数进行身份验证,对于分片集群,建议使用--oplog参数实现时间点恢复,确保数据一致性,备份完成后,可通过mongorestore命令进行恢复,如mongorestore --db logdb_restore D:\mongodb_backup\logdb。

通用注意事项
- 权限问题:执行备份命令的用户需具有数据库的足够权限,如MySQL的
SELECT、LOCK TABLES权限,SQL Server的BACKUP DATABASE权限。 - 路径与文件名:备份路径需提前存在,且文件名避免使用特殊字符,防止命令解析错误。
- 日志记录:建议备份后记录操作日志,包括备份时间、文件大小、校验和等信息,便于后续验证。
- 自动化脚本:可通过Windows任务计划程序设置定时备份,例如每日凌晨2点执行MySQL备份脚本,内容为
@echo off mysqldump -u用户名 -p密码 数据库名 > D:\backup_%date:~0,4%%date:~5,2%%date:~8,2%.sql,实现无人值守备份。 - 备份验证:定期测试备份文件的可用性,确保恢复流程正常,避免备份文件损坏却未发现。
数据库备份命令对比表
| 数据库类型 | 备份工具 | 基本命令示例 | 特殊参数/说明 |
|---|---|---|---|
| MySQL | mysqldump | mysqldump -uroot -p testdb > D:\backup.sql |
--single-transaction(避免锁表) |
| SQL Server | sqlcmd | BACKUP DATABASE SalesDB TO DISK = 'D:\SalesDB.bak' |
WITH DIFFERENTIAL(差异备份) |
| PostgreSQL | pg_dump | pg_dump -U postgres -F c -f D:\backup.dump userdb |
-F c(自定义归档格式) |
| MongoDB | mongodump | mongodump --db logdb --out D:\backup |
--oplog(时间点恢复) |
相关问答FAQs
Q1: 备份MySQL数据库时出现“Access denied”错误,如何解决?
A1: 该错误通常是由于用户权限不足或密码错误导致,可检查以下几点:1)确认用户名和密码是否正确,注意区分大小写;2)确保用户具有SELECT、LOCK TABLES(若使用--single-transaction则不需要)等必要权限,可通过GRANT SELECT, LOCK TABLES ON *.* TO '用户名'@'localhost'授权;3)若通过远程主机备份,需检查数据库服务器的防火墙设置,确保允许连接。
Q2: 如何在CMD中设置SQL Server备份文件覆盖已有文件?
A2: SQL Server默认不允许覆盖现有备份文件,需在命令中添加WITH INIT参数。BACKUP DATABASE SalesDB TO DISK = 'D:\SalesDB.bak' WITH INIT,其中WITH INIT会覆盖现有文件并创建新备份头,若需追加而非覆盖,可使用WITH NOINIT参数,但需注意,WITH INIT会直接删除原文件,操作前建议确认文件路径正确,避免误删重要数据。

