在mysql docker中增加max_allowed_pa​​cket大小

Bha*_*aju 18 mysql linux docker max-allowed-packet

我们正在使用Docker for mysql,我们在运行时遇到以下错误

Packet for query is too large (12884616 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (12884616 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.
Run Code Online (Sandbox Code Playgroud)

现在我们需要增加mysql配置的max_allowed_packet大小,任何人都可以帮我解决docker命令增加的问题.max_allowed_packet

chr*_*and 43

作为容器命令的参数:

docker run -it -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7 --max-allowed-packet=67108864
Run Code Online (Sandbox Code Playgroud)

请参阅https://hub.docker.com/_/mysql/上的 "没有cnf文件的配置" ,这里为后代复制:

没有cnf文件的配置许多配置选项可以作为标志传递给mysqld.这将使您可以灵活地自定义容器,而无需cnf文件.例如,如果要更改所有表的默认编码和排序规则以使用UTF-8(utf8mb4),只需运行以下命令:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

如果您想查看可用选项的完整列表,请运行:

$ docker run -it --rm mysql:tag --verbose --help

使用时docker-compose(如评论中所述),添加command带参数的键:

version: "3"
services:
  data:
    image: "mysql:5.7.20"
    command: --max_allowed_packet=32505856      # Set max_allowed_packet to 256M (or any other value)
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=db
      - MYSQL_USER=user
      - MYSQL_PASSWORD=user_password

  • 我发现 sql 导入也必须确保正确的连接和数据库编码。为此,最好将命令更改为: `command: [ "--character-set-server=utf8mb4", "--collat​​ion-server=utf8mb4_unicode_ci", "--init-connect='SET NAMES utf8mb4'", "--max-allowed-packet=67108864" ]` 并添加另一个环境参数:`- LANG=C.UTF-8` (3认同)
  • 在docker撰写文件的任何帮助? (2认同)

r89*_*89m 12

使用时docker-compose(如评论中所述),添加command带参数的键,例如:

version: "3"
services:
  data:
    image: "mysql:5.7.20"
    # Set max_allowed_packet to 256M (or any other value)
    command: --max_allowed_packet=32505856
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=db
      - MYSQL_USER=user
      - MYSQL_PASSWORD=user_password
Run Code Online (Sandbox Code Playgroud)

虽然这适用于MySQL泊坞窗图像,但它可能无法全部工作,它会覆盖默认命令.

更多信息:Docker Compose - 命令


r4p*_*phG 5

我认为你应该在 Dockerfile 中修改它,如下所示:

RUN sed -ire 's/max_allowed_packet.*=.*/max_allowed_packet = YOURVALUE/g' /etc/mysql/my.cnf