You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker MySQL容器中无法同时执行Dump导入与全局参数设置命令的问题

解决MySQL 5.7 Dump导入8.0.4容器的版本兼容问题

问题根源

你之前的命令无法正常导入dump文件,原因如下:

  • 使用-e参数时,MySQL客户端执行指定的SET语句后会直接退出,不会读取管道传入的dump内容
  • 使用<<<输入重定向时,该输入会覆盖管道内容,MySQL只会执行SET语句,完全忽略dump文件

正确解决方案

方法1:分两次执行命令

先单独设置全局变量,再导入dump文件:

# 执行全局变量配置
sudo docker exec -i easy_marine_db_8 mysql easy_marine -uworkbench -pworkbench -e "SET GLOBAL log_bin_trust_function_creators = 1;"
# 导入dump文件
sudo cat easy_marine.sql | docker exec -i easy_marine_db_8 mysql easy_marine -uworkbench -pworkbench

方法2:合并命令一次执行

将SET语句和dump文件内容合并后传入MySQL,确保先执行配置再导入数据:

echo "SET GLOBAL log_bin_trust_function_creators = 1;" | cat - easy_marine.sql | sudo docker exec -i easy_marine_db_8 mysql easy_marine -uworkbench -pworkbench

说明:cat - easy_marine.sql会先读取标准输入(即echo输出的SET语句),再读取dump文件内容,一起传递给MySQL客户端

方法3:修改容器配置永久生效

如果需要长期解决这个问题,可以修改MySQL容器的启动配置,让变量在容器启动时自动生效:

Docker Compose示例:

services:
  easy_marine_db_8:
    image: mysql:8.0.4
    command: --log-bin-trust-function-creators=1
    environment:
      MYSQL_USER: workbench
      MYSQL_PASSWORD: workbench
      MYSQL_DATABASE: easy_marine
    # 其他挂载、端口等配置...

直接docker run示例:

docker run -d \
  --name easy_marine_db_8 \
  -e MYSQL_USER=workbench \
  -e MYSQL_PASSWORD=workbench \
  -e MYSQL_DATABASE=easy_marine \
  mysql:8.0.4 --log-bin-trust-function-creators=1

内容的提问来源于stack exchange,提问作者rafaelpadu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:02:43