docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker MySQL导出数据库

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

作者:weixin_46244623

在使用 Docker 部署 MySQL 的场景中,经常会需要一次性导出容器内除系统库以外的所有数据库,下面小编就和大家介绍一下具体实现方法,有需要的小伙伴可以了解下

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

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

一、整体思路

实现流程如下:

二、完整命令示例

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 "..."

2. 使用 Here Document 生成脚本

cat << 'EOF' > /tmp/export_dbs.sh

3. MySQL 认证方式

PASSWORD="root"
mysql -uroot -p${PASSWORD} --socket=/var/run/mysqld/mysqld.sock

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

SHOW DATABASES;

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

最终只保留业务数据库。

5. 循环导出数据库

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

特点:

四、导出结果说明

导出完成后:

SQL 文件位于容器内:

/tmp/*.sql

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

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

或批量拷贝整个目录。

五、适用场景

MySQL Docker 容器备份

数据迁移前批量导出

CI / 自动化备份脚本

测试环境数据库快照

六、注意事项

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

大库导出时注意磁盘空间

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

七、总结

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

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

您可能感兴趣的文章:
阅读全文