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 参数 |