使用Docker实现MySQL容器中批量导出所有数据库

 更新时间:2025年12月23日 09:04:23   作者:weixin_46244623  
在使用 Docker 部署 MySQL 的场景中,经常会需要一次性导出容器内除系统库以外的所有数据库,下面小编就和大家介绍一下具体实现方法,有需要的小伙伴可以了解下

在使用 Docker 部署 MySQL 的场景中,经常会遇到这样的需求:一次性导出容器内除系统库以外的所有数据库,并分别生成 .sql 文件,用于备份或迁移。

本文介绍一种无需进入交互式容器、通过一条 docker exec 命令,在容器内生成并执行导出脚本的实现方式。

一、整体思路

实现流程如下:

  • 通过 docker exec 在 MySQL 容器中执行 Bash
  • 动态创建一个数据库导出脚本 export_dbs.sh
  • 使用 mysql 命令获取所有数据库列表
  • 过滤掉系统数据库
  • 循环调用 mysqldump,将每个数据库导出为独立的 .sql 文件
  • 将导出文件保存到容器内 /tmp 目录

二、完整命令示例

docker exec -it mysql-container bash -c "cat << 'EOF' > /tmp/export_dbs.sh
#!/bin/bash

PASSWORD=\"root\"

mysql -uroot -p\${PASSWORD} --socket=/var/run/mysqld/mysqld.sock -e \"SHOW DATABASES;\" | \
  grep -v \"Database\" | \
  grep -v \"information_schema\" | \
  grep -v \"mysql\" | \
  grep -v \"performance_schema\" | \
  grep -v \"sys\" | \
  while read db; do
    echo \"Exporting database: \$db\"
    mysqldump -uroot -p\${PASSWORD} \
      --socket=/var/run/mysqld/mysqld.sock \
      --databases \"\$db\" > \"/tmp/\$db.sql\"
  done

echo \"Export completed.\"
EOF

chmod +x /tmp/export_dbs.sh
/tmp/export_dbs.sh"

三、关键部分详解

1. docker exec 执行容器内命令

docker exec -it mysql-container bash -c "..."
  • mysql-container:MySQL 容器名称
  • bash -c:在容器中执行一段 Bash 命令
  • -it:支持交互与终端输出

2. 使用 Here Document 生成脚本

cat << 'EOF' > /tmp/export_dbs.sh
  • 使用 Here Document 写入多行脚本
  • 'EOF' 使用单引号可避免变量在宿主机侧被提前展开
  • 脚本被写入容器内 /tmp/export_dbs.sh

3. MySQL 认证方式

PASSWORD="root"
mysql -uroot -p${PASSWORD} --socket=/var/run/mysqld/mysqld.sock
  • 使用 root 用户连接
  • 通过 Unix Socket 连接 MySQL(适用于官方 MySQL Docker 镜像)
  • 避免 TCP 连接带来的端口问题

4. 获取并过滤数据库列表

SHOW DATABASES;

配合 grep -v 过滤系统数据库:

  • information_schema
  • mysql
  • performance_schema
  • sys

最终只保留业务数据库。

5. 循环导出数据库

while read db; do
  mysqldump --databases "$db" > "/tmp/$db.sql"
done

特点:

  • 每个数据库生成一个独立的 SQL 文件
  • 文件命名规则:数据库名.sql
  • 便于单库恢复与管理

四、导出结果说明

导出完成后:

SQL 文件位于容器内:

/tmp/*.sql

如需拷贝到宿主机,可使用:

docker cp mysql-container:/tmp/dbname.sql .

或批量拷贝整个目录。

五、适用场景

MySQL Docker 容器备份

数据迁移前批量导出

CI / 自动化备份脚本

测试环境数据库快照

六、注意事项

不建议在生产环境明文写密码(可改用 .my.cnf

大库导出时注意磁盘空间

可根据需要添加 --single-transaction 以减少锁表

七、总结

通过一条 docker exec 命令,我们实现了:

  • 在容器内动态生成脚本
  • 自动过滤系统数据库
  • 批量导出所有业务库
  • 无需手动进入容器操作

到此这篇关于使用Docker实现MySQL容器中批量导出所有数据库的文章就介绍到这了,更多相关Docker MySQL导出数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Centos7使用docker部署生产环境中间件的详细步骤

    Centos7使用docker部署生产环境中间件的详细步骤

    这篇文章主要为大家详细介绍了腾讯云Centos7使用docker部署生产环境中间件的详细步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07
  • 在docker-compose.yml文件中配置容器的环境变量方式

    在docker-compose.yml文件中配置容器的环境变量方式

    本文介绍了在docker-compose.yml文件中设置和使用环境变量的方法,包括直接设置环境变量、从文件读取环境变量以及使用多个环境文件进行不同部署环境的配置
    2024-11-11
  • 在Ubuntu Server 22.04上安装 Docker的详细步骤记录

    在Ubuntu Server 22.04上安装 Docker的详细步骤记录

    通过使用容器技术,Docker能够让开发人员将应用及其依赖环境一同打包,从而实现快速部署、一致的开发环境和优秀的可移植性,这篇文章主要给大家给大家介绍了关于在Ubuntu Server 22.04上安装 Docker详细步骤的相关资料,需要的朋友可以参考下
    2024-08-08
  • Docker快速部署SpringBoot项目介绍

    Docker快速部署SpringBoot项目介绍

    大家好,本篇文章主要讲的是Docker快速部署SpringBoot项目介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦,方便下次浏览
    2021-12-12
  • Docker安装配置镜像加速器的实现

    Docker安装配置镜像加速器的实现

    本文主要介绍了Docker安装配置镜像加速器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • docker安装RabbitMQ及安装延迟插件的详细过程

    docker安装RabbitMQ及安装延迟插件的详细过程

    MQ(message queue)字面意思上来说消息队列,是一种跨进程的通信机制,用于上下游传递消息,本文给大家详细介绍docker安装RabbitMQ及安装延迟插件的过程,感兴趣的朋友一起看看吧
    2022-06-06
  • Linux下docker 容器退出bash的两种实现方法

    Linux下docker 容器退出bash的两种实现方法

    这篇文章主要介绍了Linux下docker 容器退出bash的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker inspect 操作详解

    docker inspect 操作详解

    docker inspect是docker客户端的原生命令,用于查看docker对象的底层基础信息。包括容器的id、创建时间、运行状态、启动参数、目录挂载、网路配置等等。另外,该命令也可以用来查看docker镜像的信息,这篇文章主要介绍了docker inspect 详解,需要的朋友可以参考下
    2023-01-01
  • docker利用WebHook实现持续集成

    docker利用WebHook实现持续集成

    这篇文章主要介绍了docker利用WebHook实现持续集成的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 使用docker部署django技术栈项目的方法步骤

    使用docker部署django技术栈项目的方法步骤

    这篇文章主要介绍了使用docker部署django技术栈项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论