使用命令行备份/还原docker运行的数据库 (MySQL、PostgreSQL)

备份MySQL数据库,如果有图形界面操作肯定很方便,那就使用图形界面进行备份与还原;若是使用的Linux系统,没有图形界面,可以试试如下方式:

1、备份数据库

一、MySQL(Docker)备份与恢复

假设容器名:mysql;数据库名:biz_db


✅ 1. 备份(推荐方式:docker exec)

✔ 标准备份

bash 复制代码
docker exec mysql \
  mysqldump -u root -p'数据库密码' \
  --single-transaction --quick \
  biz_db > /home/soft/mysql/backup/biz_db_$(date +%F).sql

docker exec mysql \

mysqldump -u root -p'数据库密码' \

--single-transaction --quick \

数据库名称 > /位置/biz_db_$(date +%F).sql


✔ 压缩备份(强烈推荐)

bash 复制代码
docker exec mysql \
  mysqldump -u root -p'数据库密码' biz_db \
  | gzip > /home/soft/mysql/biz_db_bak.sql.gz

docker exec mysql \

mysqldump -u root -p'数据库密码' 数据库名称 \

| gzip > /位置/biz_db_bak.sql.gz


✔ 备份结构 + 存储过程(生产建议)

bash 复制代码
docker exec mysql \
  mysqldump -u root -p'数据库密码' \
  --routines --triggers --events \
  --single-transaction biz_db \
  | gzip > /home/soft/mysql/backup/biz_db_full.sql.gz

docker exec mysql \

mysqldump -u root -p'数据库密码' \

--routines --triggers --events \

--single-transaction 数据库名称 \

| gzip > /backup/biz_db_full.sql.gz


⚠️ 注意(生产关键点)

  • 不要写成 -p tbea@xxx(中间不能有空格)
  • 容器内执行比宿主机直连更稳
  • 建议不要用 root → 用 backup 用户

✅ 2. 恢复

✔ 从 SQL 恢复

bash 复制代码
cat /home/soft/mysql/backup/biz_db.sql | docker exec -i mysql \
  mysql -u root -p'数据库密码' biz_db

cat /backup/biz_db.sql | docker exec -i mysql \

mysql -u root -p'数据库密码' 数据库名称


✔ 从压缩恢复

bash 复制代码
gunzip < /home/soft/mysql/backup/biz_db.sql.gz | docker exec -i mysql \
  mysql -u root -p'数据库密码' biz_db

gunzip < /backup/biz_db.sql.gz | docker exec -i mysql \

mysql -u root -p'数据库密码' 数据库名称


🚀 3. 直接恢复到"新容器"(非常实用)

bash 复制代码
docker run -d --name mysql-new \
  -e MYSQL_ROOT_PASSWORD=数据库密码 \
  mysql:8.0

# 等待启动后恢复
gunzip < biz_db.sql.gz | docker exec -i mysql-new \
  mysql -uroot -p数据库密码 biz_db

docker run -d --name mysql-new \

-e MYSQL_ROOT_PASSWORD=数据库密码 \

mysql:8.0

等待启动后恢复

gunzip < biz_db.sql.gz | docker exec -i mysql-new \

mysql -uroot -p'数据库密码' 数据库名称


二、PostgreSQL(Docker)备份与恢复

假设容器名:postgres;数据库名:biz_db

✅ 1. 备份

✔ 标准备份(推荐)

bash 复制代码
docker exec postgres \
  pg_dump -U postgres -d biz_db \
  -F c -f /tmp/biz_db.dump

docker exec postgres \

pg_dump -U postgres -d biz_db \

-F c -f /tmp/biz_db.dump

然后拷贝出来:

bash 复制代码
docker cp postgres:/tmp/biz_db.dump /backup/

✔ 一步到位(宿主机直接生成)

bash 复制代码
docker exec postgres \
  pg_dump -U postgres biz_db \
  > /backup/biz_db.sql

docker exec postgres \

pg_dump -U postgres biz_db \

> /backup/biz_db.sql


✔ 压缩备份

bash 复制代码
docker exec postgres \
  pg_dump -U postgres biz_db \
  | gzip > /backup/biz_db.sql.gz

docker exec postgres \

pg_dump -U postgres biz_db \

| gzip > /backup/biz_db.sql.gz


✅ 2. 恢复


✔ SQL恢复

bash 复制代码
cat /backup/biz_db.sql | docker exec -i postgres \
  psql -U postgres -d biz_db

✔ dump格式恢复(推荐)

bash 复制代码
cat /backup/biz_db.dump | docker exec -i postgres \
  pg_restore -U postgres -d biz_db

✔ 压缩恢复

bash 复制代码
gunzip < /backup/biz_db.sql.gz | docker exec -i postgres \
  psql -U postgres -d biz_db

这样就可以实现数据库的备份还原操作了!

相关推荐
螺蛳粉 螺蛳粉2 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
幽灵诶3 小时前
Mysql(基于测试的学习)
数据库·mysql
宇宙无敌暴龙战士6663 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊3 小时前
MySQL 的四种隔离级别
java·数据库·mysql
PellyKoo5 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
时早玖沐5 小时前
放弃 QQ 官方机器人:用 SnowLuma + AstrBot 自建 QQ 机器人
docker·开源·agent
paopaokaka_luck6 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
这个DBA有点耶6 小时前
为什么删掉索引后,查询瞬间变快了?探讨MySQL的随机I/O与顺序I/O博弈
数据库·mysql·代码规范
阿标在干嘛7 小时前
容器编排的“场景适配”:我们为什么在部分服务中回归了Docker Compose?
运维·docker·容器
GreatSQL8 小时前
GreatSQL 8.0回流MySQL 5.7主从复制中断分析排查过程
mysql