web-dev-qa-db-fra.com

augmenter la taille max_allowed_packet dans mysql docker

Nous utilisons Docker pour mysql, nous sommes confrontés à l'erreur ci-dessous lors de l'exécution

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.

nous devons maintenant augmenter max_allowed_packet taille dans la configuration mysql, quelqu'un peut-il m'aider sur la commande docker pour augmenter max_allowed_packet.

16
Bharath Dasararaju

Comme argument à la commande conteneur:

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

Voir "Configuration sans fichier cnf" sur https://hub.docker.com/_/mysql/ , copié ici pour la postérité:

Configuration sans fichier cnf De nombreuses options de configuration peuvent être passées en tant que drapeaux à mysqld. Cela vous donnera la flexibilité de personnaliser le conteneur sans avoir besoin d'un fichier cnf. Par exemple, si vous souhaitez modifier l'encodage et le classement par défaut pour toutes les tables afin d'utiliser UTF-8 (utf8mb4), exécutez simplement ce qui suit:

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

Si vous souhaitez voir une liste complète des options disponibles, lancez simplement:

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

Lors de l'utilisation de docker-compose (comme demandé dans les commentaires), ajoutez une clé command avec les arguments:

 version: "3" 
 services: 
 données: 
 image: "mysql: 5.7.20" 
 commande: --max_allowed_packet = 32505856 # Définissez max_allowed_packet sur 256M (ou toute autre valeur) 
 Environnement: 
 - MYSQL_ROOT_PASSWORD = mot de passe 
 - MYSQL_DATABASE = db 
 - MYSQL_USER = utilisateur 
 - MYSQL_PASSWORD = mot_de_passe_utilisateur 
39
chrishiestand

Lors de l'utilisation de docker-compose (comme demandé dans les commentaires), ajoutez une clé command avec les arguments, par exemple:

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

Bien que cela fonctionne pour les images du docker MySQL, cela peut ne pas fonctionner pour tous car il écrase la commande par défaut.

Plus d'informations: Docker Compose - Command

9
r89m

Je pense que vous devriez le modifier dans votre Dockerfile comme ceci:

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

4
r4phG