菜鸟科技网

SQL备份数据库命令有哪些?

SQL 备份数据库命令是数据库管理中至关重要的操作,它能够确保数据在发生硬件故障、软件错误、人为误操作或灾难事件时能够得以恢复,保障业务的连续性和数据的安全性,不同的数据库管理系统(DBMS)如 MySQL、SQL Server、PostgreSQL、Oracle 等,其备份数据库的命令和语法各有差异,但核心目标一致——创建数据库的副本或特定数据对象的备份文件,以下将详细介绍几种主流数据库的备份命令,涵盖全量备份、增量备份、差异备份等常见场景,并辅以实际示例和注意事项。

SQL备份数据库命令有哪些?-图1
(图片来源网络,侵删)

MySQL 数据库备份命令

MySQL 提供了多种备份工具,mysqldump 是最常用且功能强大的命令行工具,适用于逻辑备份(即 SQL 语句导出),对于物理备份(文件系统级别的备份),可使用 mysqlbackup(需商业版支持)或第三方工具如 Percona XtraBackup。

使用 mysqldump 进行全量备份

mysqldump 的基本语法为:

mysqldump -u [用户名] -p[密码] [数据库名] > [备份文件路径].sql
  • 示例:备份 testdb 数据库到 /backup/testdb_backup.sql

    mysqldump -u root -ptest123 testdb > /backup/testdb_backup.sql

    若不希望在命令行中暴露密码,可省略 -p 后的密码,执行后交互式输入密码。

    SQL备份数据库命令有哪些?-图2
    (图片来源网络,侵删)
  • 备份多个数据库:使用 --databases 参数,多个数据库名以空格分隔:

    mysqldump -u root -p --databases db1 db2 > /backup/multi_db_backup.sql
  • 备份所有数据库:使用 --all-databases 参数:

    mysqldump -u root -p --all-databases > /backup/all_db_backup.sql

压缩备份(节省存储空间)

通过管道将 mysqldump 的输出压缩为 .gz 文件:

mysqldump -u root -p testdb | gzip > /backup/testdb_backup.sql.gz

仅备份表结构(不包含数据)

使用 --no-data 参数:

SQL备份数据库命令有哪些?-图3
(图片来源网络,侵删)
mysqldump -u root -p --no-data testdb > /backup/testdb_structure.sql

仅备份数据(不包含表结构)

使用 --no-create-info 参数:

mysqldump -u root -p --no-create-info testdb > /backup/testdb_data.sql

MySQL 增量备份(需启用二进制日志)

MySQL 的增量备份依赖于二进制日志(binlog),需在配置文件(my.cnfmy.ini)中启用:

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
  • 步骤
    1. 全量备份(如前述 mysqldump 命令);
    2. 记录备份时的二进制日志文件名和位置:
      mysql -u root -p -e "SHOW MASTER STATUS;"

      输出示例:mysql-bin.000003 123(文件名 mysql-bin.000003,位置 123);

    3. 恢复时,先恢复全量备份,再应用二进制日志(从位置 123 开始)到最新数据。

SQL Server 数据库备份命令

SQL Server 使用 BACKUP DATABASE 语句进行备份,支持全量备份、差异备份和事务日志备份,备份文件通常为 .bak.trn 格式。

全量备份(完整数据库备份)

BACKUP DATABASE [数据库名] 
TO DISK = '[备份文件路径].bak' 
WITH NAME = '全量备份名称', 
     DESCRIPTION = '备份描述', 
     COMPRESSION, -- 启用压缩(需SQL Server 2008及以上版本)
     STATS = 10,   -- 每完成10%的备份输出进度
     CHECKSUM;     -- 验证备份校验和
  • 示例:备份 SalesDBD:\Backup\SalesDB_Full.bak
    BACKUP DATABASE SalesDB 
    TO DISK = 'D:\Backup\SalesDB_Full.bak' 
    WITH NAME = 'SalesDB Full Backup', 
         COMPRESSION, 
         STATS = 10;

差异备份(备份自上次全量备份以来的更改)

需先执行一次全量备份,再执行差异备份:

BACKUP DATABASE SalesDB 
TO DISK = 'D:\Backup\SalesDB_Diff.bak' 
WITH DIFFERENTIAL, 
     NAME = 'SalesDB Differential Backup';

事务日志备份(增量备份的一种,需启用“完整恢复模式”或“大容量日志恢复模式”)

BACKUP LOG [数据库名] 
TO DISK = '[备份文件路径].trn' 
WITH NAME = '事务日志备份名称';
  • 示例:备份 SalesDB 的事务日志:
    BACKUP LOG SalesDB 
    TO DISK = 'D:\Backup\SalesDB_Log.trn' 
    WITH NAME = 'SalesDB Log Backup';

备份到 Azure Blob 存储(SQL Server 2012及以上版本)

需先创建凭证(指向存储账户的密钥),再执行备份:

-- 创建凭证
CREATE CREDENTIAL [AzureBackupCredential] 
WITH IDENTITY = 'StorageAccountName', 
     SECRET = 'StorageAccountKey';
-- 备份到Azure
BACKUP DATABASE SalesDB 
TO URL = 'https://StorageAccountName.blob.core.windows.net/backup/SalesDB_Full.bak' 
WITH CREDENTIAL = 'AzureBackupCredential', 
     COMPRESSION, 
     NAME = 'Azure Full Backup';

PostgreSQL 数据库备份命令

PostgreSQL 主要使用 pg_dump 进行逻辑备份,pg_basebackup 进行物理备份(流复制备份)。

使用 pg_dump 进行全量备份

基本语法:

pg_dump -U [用户名] -d [数据库名] -f [备份文件路径].sql
  • 示例:备份 testdb 数据库到 /backup/testdb_backup.sql

    pg_dump -U postgres -d testdb -f /backup/testdb_backup.sql

    执行后会提示输入密码(需在 pg_hba.conf 中配置信任或密码认证)。

  • 自定义格式备份(推荐):支持压缩、并行备份,恢复时需使用 pg_restore

    pg_dump -U postgres -d testdb -Fc -f /backup/testdb_backup.dump
  • 备份表空间:使用 -l 参数指定表空间,或通过 --tablespace-mapping 映射表空间路径:

    pg_dump -U postgres -d testdb --tablespace-mapping=ts_1=/new/path/ts_1 -f /backup/testdb_backup.sql

使用 pg_basebackup 进行物理备份(适用于流复制或灾备)

pg_basebackup -h [主机名] -p [端口] -U [复制用户] -D [备份目录] -Fp -z -P
  • 参数说明:
    • -h:数据库服务器主机名(默认本地);
    • -p:端口号(默认 5432);
    • -U:具有 REPLICATION 权限的用户;
    • -D:备份文件存储目录;
    • -Fp:输出为纯文件格式(默认);
    • -z:启用压缩;
    • -P:显示进度。

PostgreSQL 增量备份

PostgreSQL 原生不支持增量备份,但可通过 pg_dumpall 备份所有数据库、角色和权限,或使用第三方工具如 barman 实现增量备份。

Oracle 数据库备份命令

Oracle 提供多种备份工具,包括 expdp(数据泵导出)、rman(恢复管理器,物理备份)等。

使用 expdp 进行逻辑备份

需先创建目录对象(指向服务器上的备份路径):

-- 创建目录(需SYSDBA权限)
CREATE DIRECTORY expdp_dir AS '/backup/';
-- 授予用户目录权限
GRANT READ, WRITE ON DIRECTORY expdp_dir TO scott;
  • 全量导出

    expdp scott/tiger@orcl DIRECTORY=expdp_dir DUMPFILE=full_exp.dmp FULL=YES
  • 按用户导出

    expdp scott/tiger@orcl DIRECTORY=expdp_dir DUMPFILE=user_exp.dmp SCHEMAS=scott
  • 按表空间导出

    expdp system/oracle@orcl DIRECTORY=expdp_dir DUMPFILE=ts_exp.dmp TABLESPACES=users,example

使用 RMAN 进行物理备份(推荐)

rman target /  # 连接到本地数据库
  • 全量备份(备份整个数据库)

    RMAN> BACKUP DATABASE PLUS ARCHIVELOG;  -- 备份数据库和归档日志
  • 增量备份

    RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;  -- 0级增量备份(相当于全量)
    RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;  -- 1级增量备份(备份自上次0级或1级备份以来的变化)
  • 备份控制文件

    RMAN> BACKUP CURRENT CONTROLFILE TO '/backup/controlfile.bak';
  • 备份到磁带或云存储:需配置 CONFIGURE CHANNEL

    RMAN> CONFIGURE CHANNEL DEVICE TYPE S3 PARMS 'ACCESS_KEY=xxx SECRET_KEY=xxx BUCKET_NAME=mybucket';
    RMAN> BACKUP DATABASE TO 'db_backup.bak';

备份命令的通用注意事项

  1. 权限要求:执行备份的用户需具备足够的权限,如 MySQL 的 SELECTLOCK TABLES,SQL Server 的 CONTROL 权限,PostgreSQL 的 CONNECTSELECT 权限等。
  2. 备份频率:根据数据更新频率确定,高频更新的数据库需增加备份频率(如每日全量+每小时增量)。
  3. 备份验证:定期测试备份文件的可用性,可通过恢复命令(如 MySQL 的 mysql -u root -p testdb < backup.sql)验证备份完整性。
  4. 安全存储:备份文件需存储在与数据库服务器不同的物理位置,避免单点故障;敏感数据备份需加密(如 MySQL 的 --encrypt 参数、SQL Server 的 TDE 加密)。
  5. 备份脚本自动化:通过 cron(Linux)或任务计划程序(Windows)定期执行备份脚本,避免人工遗忘。

相关问答FAQs

问题1:如何选择合适的数据库备份工具?
解答:选择备份工具需考虑以下因素:

  • 数据库类型:MySQL 优先选 mysqldumpPercona XtraBackup(物理备份),SQL Server 选 BACKUP DATABASESQL Server Management Studio (SSMS) 图形化工具,PostgreSQL 选 pg_dumppg_basebackup,Oracle 选 expdpRMAN
  • 备份类型:逻辑备份(mysqldumpexpdp)可读性强,适合数据迁移或小数据量;物理备份(pg_basebackupRMAN)恢复速度快,适合大数据量或灾备场景。
  • 性能影响:逻辑备份可能锁表(如 mysqldump 默认锁定表),生产环境建议使用支持热备份的工具(如 Percona XtraBackupRMAN)。
  • 成本:开源工具(mysqldumppg_dump)免费,商业工具(如 Oracle RMAN 部分功能、SQL Server 企业版)需付费,但功能更强大(如压缩、加密、并行备份)。

问题2:数据库备份失败时如何排查?
解答:备份失败常见原因及排查步骤如下:

  1. 权限不足:检查备份用户是否具备所需权限(如 MySQL 的 SHOW DATABASES、SQL Server 的 VIEW DEFINITION),可通过数据库日志(如 MySQL 的 error.log、SQL Server 的 ERRORLOG)确认错误信息。
  2. 磁盘空间不足:检查备份路径所在磁盘的剩余空间,可通过 df -h(Linux)或 wmic logicaldisk get size,freespace,caption(Windows)查看。
  3. 网络问题:若备份到远程存储(如 Azure Blob、S3),检查网络连通性(如 pingtelnet)和存储账户密钥是否正确。
  4. 数据库状态异常:如数据库处于 RESTORINGRECOVERING 状态,或存在未提交的长事务,可能导致备份失败,可通过数据库管理工具查看当前状态,并终止异常事务。
  5. 工具版本兼容性:如使用旧版 mysqldump 备份新版 MySQL 数据库,可能因语法不兼容失败,需升级工具版本。
  6. 配置错误:如 PostgreSQL 未配置 pg_hba.conf 导致用户无法登录,或 Oracle 未创建备份目录对象,需检查相关配置文件。

通过以上步骤逐一排查,可定位备份失败的具体原因并解决。

分享:
扫描分享到社交APP
上一篇
下一篇