Увеличить размер max_allowed_packet в MySQL докер

Мы используем Docker для 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.

теперь нам нужно увеличить max_allowed_packet размер в конфигурации MySQL, может кто-нибудь помочь мне по команде Docker, чтобы увеличить max_allowed_packet,

3 ответа

Решение

В качестве аргумента команды контейнера:

docker run -it -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7 --max-allowed-packet=67108864

Смотрите "Конфигурация без файла cnf" на https://hub.docker.com/_/mysql/, скопированный здесь для потомков:

Конфигурация без файла cnf Многие параметры конфигурации могут быть переданы в MySQL как флаги. Это даст вам гибкость в настройке контейнера без использования файла 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 ключ с аргументами:

версия: "3"
Сервисы:
  данные:
    изображение: "mysql:5.7.20"
    команда: --max_allowed_packet=32505856      # Установить max_allowed_packet 256M (или любое другое значение)
    среда:
      - MYSQL_ROOT_PASSWORD= пароль
      - MYSQL_DATABASE= дБ
      - MYSQL_USER= пользователь
      - MYSQL_PASSWORD=user_password

Когда используешь 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

Хотя это работает для образов докера MySQL, оно может работать не для всех, если оно перезаписывает команду по умолчанию.

Дополнительная информация: Docker Compose - Command

Я думаю, что вы должны изменить его в своем Dockerfile следующим образом:

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

Другие вопросы по тегам