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 分钟前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库
KaiwuDB18 分钟前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
auspicious航34 分钟前
PostgreSQL的备份与恢复
数据库·postgresql
这个DBA有点耶1 小时前
从 MySQL 到时序数据库:我帮朋友做迁移的完整记录
数据库·架构·dba
泡海椒1 小时前
深度解析JQuick-SQL AST到逻辑计划转换机制|分布式SQL原理
数据库·分布式·sql
心静财富之门1 小时前
Python 数据共享四种方案完整实例(同进程 / JSON / Redis / HTTP)
数据库·python·oracle
略略略咯咯1 小时前
啊啊啊啊啊
java·服务器·数据库
奇牙coding1 小时前
GPT-5.5 报 401 invalid_api_key 怎么办?换密钥前按 4 层排查请求头、项目权限和端点
数据库·gpt·ios·ai
IvorySQL2 小时前
PostgreSQL 日报| WAL summarizer 断言失败(10 月 26 日)
数据库·postgresql·区块链
这个DBA有点耶2 小时前
2026年国产数据库“实际用户增长最快”核验指南:口径优先级、可查数据与选型动作清单
数据库·mysql·架构