MySQL / PostgreSQL 单表及表数据备份恢复实施方案

MySQL / PostgreSQL 单表及表数据备份恢复实施方案

一、方案概述

本方案针对数据库单张数据表,提供标准化备份、恢复操作,包含:整表(结构+数据)备份、仅表结构备份、仅表数据备份、条件增量备份,同时适配 MySQL、PostgreSQL 两大主流数据库,均提供生产安全执行命令,支持无锁在线备份、压缩备份,适用于日常运维、数据迁移、误删回滚场景。

核心适用场景:无需整库备份,仅需对业务核心单表做快照备份与恢复。

二、MySQL 单表备份与恢复方案(mysqldump)

工具:系统自带 mysqldump,无需额外安装,生产通用、稳定可靠。

1、核心参数说明(生产必备)

  • --single-transaction:InnoDB 引擎无锁热备,不阻塞业务读写(生产强制推荐)
  • -d:仅备份表结构,不包含数据
  • -t:仅备份表数据,不包含建表语句
  • --where:条件筛选,备份部分数据

2、备份命令(可直接落地)

2.1 整表备份(结构+全部数据,生产推荐)

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Plain Text # 格式:mysqldump -u用户名 -p 数据库名 表名 --single-transaction > 备份文件路径 mysqldump -uroot -p test_db user --single-transaction > /backup/mysql/user_full_$(date +%Y%m%d).sql |

执行后回车输入密码,避免明文密码泄露,安全合规。

2.2 仅备份表结构(无数据)

|---------------------------------------------------------------------------------|
| Plain Text mysqldump -uroot -p test_db user -d > /backup/mysql/user_struct.sql |

2.3 仅备份表数据(无建表语句)

|----------------------------------------------------------------------------------------------------|
| Plain Text mysqldump -uroot -p test_db user -t --single-transaction > /backup/mysql/user_data.sql |

2.4 条件备份(部分数据)

|------------------------------------------------------------------------------------------------------------------------------------------|
| Plain Text # 示例:仅备份id小于1000的数据 mysqldump -uroot -p test_db user --single-transaction --where="id < 1000" > /backup/mysql/user_part.sql |

2.5 压缩备份(节省磁盘,大表必备)

|-----------------------------------------------------------------------------------------------------------------------|
| Plain Text mysqldump -uroot -p test_db user --single-transaction | gzip > /backup/mysql/user_$(date +%Y%m%d).sql.gz |

3、恢复命令

3.1 普通sql文件恢复

|----------------------------------------------------------------------------|
| Plain Text mysql -uroot -p test_db < /backup/mysql/user_full_20260825.sql |

3.2 压缩文件恢复

|-------------------------------------------------------------------------------------|
| Plain Text gzip -d -c /backup/mysql/user_20260825.sql.gz | mysql -uroot -p test_db |

4、库内快速临时备份(无文件)

适用于临时快照,不生成磁盘文件,仅库内复制表:

|----------------------------------------------------------------------------------------------------------|
| Plain Text -- 复制表结构 CREATE TABLE user_bak LIKE user; -- 复制全部数据 INSERT INTO user_bak SELECT * FROM user; |

5、MySQL注意事项

  • InnoDB 引擎必须加 --single-transaction 实现无锁备份
  • MyISAM 引擎不支持事务,备份会锁表,建议低峰期操作
  • 备份文件默认包含 DROP TABLE 语句,恢复会覆盖原表,需提前确认

三、PostgreSQL 单表备份与恢复方案(pg_dump)

工具:pg_dump(PostgreSQL 自带备份工具),支持单表精细备份、无锁热备,适配生产环境。

1、核心参数说明

  • -t 表名:指定备份单张表
  • -s:仅备份表结构,不包含数据
  • -a:仅备份表数据,不包含表结构
  • --where:条件筛选备份部分数据
  • -F c:自定义压缩格式,备份效率更高

2、备份命令(可直接落地)

默认切换 postgres 系统用户执行:su - postgres

2.1 整表备份(结构+全部数据,生产推荐)

|--------------------------------------------------------------------------------------------------------------------------------------------------------|
| Plain Text # 格式:pg_dump -h地址 -U用户名 -d数据库名 -t表名 > 备份文件 pg_dump -h 127.0.0.1 -U postgres -d test_db -t user > /backup/pg/user_full_$(date +%Y%m%d).sql |

2.2 仅备份表结构

|-------------------------------------------------------------------------------------------------|
| Plain Text pg_dump -h 127.0.0.1 -U postgres -d test_db -t user -s > /backup/pg/user_struct.sql |

2.3 仅备份表数据

|-----------------------------------------------------------------------------------------------|
| Plain Text pg_dump -h 127.0.0.1 -U postgres -d test_db -t user -a > /backup/pg/user_data.sql |

2.4 条件备份(部分数据)

|-----------------------------------------------------------------------------------------------------------------|
| Plain Text pg_dump -h 127.0.0.1 -U postgres -d test_db -t user --where="id < 1000" > /backup/pg/user_part.sql |

2.5 压缩二进制备份(大表首选,体积小、恢复快)

|-------------------------------------------------------------------------------------------------------------|
| Plain Text pg_dump -h 127.0.0.1 -U postgres -d test_db -t user -F c -f /backup/pg/user_$(date +%Y%m%d).dump |

3、PostgreSQL 恢复命令

3.1 普通SQL文件恢复

|------------------------------------------------------------------------------------------|
| Plain Text psql -h 127.0.0.1 -U postgres -d test_db < /backup/pg/user_full_20260825.sql |

3.2 压缩dump文件恢复(专用pg_restore)

|-----------------------------------------------------------------------------------------|
| Plain Text pg_restore -h 127.0.0.1 -U postgres -d test_db /backup/pg/user_20260825.dump |

4、库内快速临时备份(无文件)

|---------------------------------------------------------------------------------------------------------------------------|
| Plain Text -- PG复制表结构+数据(快速快照) CREATE TABLE user_bak (LIKE user INCLUDING ALL); INSERT INTO user_bak SELECT * FROM user; |

5、PostgreSQL注意事项

  • pg_dump 全程无锁备份,不阻塞业务读写,适配所有生产版本
  • 恢复前建议清空目标表数据,避免主键冲突
  • 二进制 .dump 格式仅支持 pg_restore 恢复,不可用 psql 直接执行
  • 远程备份需开放数据库IP访问权限、防火墙端口

四、方案总结(运维速查)

|-----------|--------------------------------|-----------------|
| 备份类型 | MySQL 核心命令 | PostgreSQL 核心命令 |
| 整表(结构+数据) | mysqldump --single-transaction | pg_dump -t 表名 |
| 仅表结构 | mysqldump -d | pg_dump -s |
| 仅表数据 | mysqldump -t | pg_dump -a |
| 条件数据备份 | --where 参数 | --where 参数 |

相关推荐
梦想平凡1 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
xcLeigh1 小时前
让大模型长出手脚,自己写SQL查数据库(Function Calling初探)
数据库·人工智能·sql·时序数据库·timechoai
yume_sibai2 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
AugustRed3 小时前
Neo4j 图数据库原理 + 应用场景简单介绍
数据库·neo4j
Gl�ria3 小时前
Redis 高可用架构对比
数据库·redis
IpdataCloud4 小时前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
呆萌很4 小时前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
毕业设计7035 小时前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法
IvorySQL5 小时前
当PostgreSQL“听懂”MySQL——协议兼容层的设计与实战
数据库·人工智能·postgresql
这个DBA有点耶5 小时前
银行核心系统数据库迁移怎么选?6 步法+5 个避坑指南
数据库·安全·架构