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 小时前
勒索病毒零赎金解密:加密样本逆向分析与可恢复性评估方法论
大数据·网络·数据库
动力 continue1 小时前
MySQL 与网络基础 · 外键约束及 TCP/UDP 协议
网络·tcp/ip·mysql
心平气和量大福大1 小时前
android-实例2-数据库sqlite(查询)
android·数据库·sqlite
海兰1 小时前
【数据库】告别数据库性能噩梦,拥抱 UUID v7
数据库
不过普通话一乙不改名1 小时前
补充:权限与角色
mysql
linweidong1 小时前
字节AI Agent面试题大全及参考答案(下)
数据库·oracle
枫彩1 小时前
WorkBuddy 做A股自动复盘实战:数据校验、工具调用与定时报告
大数据·网络·数据库·a股·mcp·workbuddy
其实防守也摸鱼2 小时前
CTF 入门到进阶:Web、逆向、密码学与 Pwn 实战解题指南
数据库·安全·自动化·github·copilot
晓子文集2 小时前
Tushare接口文档:每日停复牌信息(suspend_d)
大数据·数据库·金融·金融数据·量化投资