Docker Mariadb error Got a packet bigger than max_allowed_packet bytes

Docker Mariadb error Got a packet bigger than max_allowed_packet bytes

Got an error reading communication packets

Trazas del error

2021-03-06 18:51:23 12 [Warning] 
    Aborted connection 12 to db: 'db_two' user: 'root' host: '172.23.0.1' (Got a packet bigger than 'max_allowed_packet' bytes)
2021-03-06 19:05:45 14 [Warning] 
    Access denied for user 'root'@'localhost' (using password: NO)

La situación es la siguiente. Tengo un script en python que usa el ORM sqlalchemy que interactua con el contenedor que tiene la bd MariaDB-1:10.3.7

SQLAlchemy trabaja con transacciones, es decir con el BEGIN, COMMIT y ROLLBACK. Hasta que no se hace el COMMIT no se procesa el conjunto de sentencias SQL en la bd.

Si esta colección no es muy grande no hay problema.

La pregunta aquí es: ¿Qué es grande?. La respuesta la encontramos en el archivo: contedor-db:/etc/mysql/my.cnf concretamente en el atributo max_allowed_packet

Mariadb archivo my.cnf

Cuando el tamaño es mayor al permitido se visualiza el siguiente error en Python

Error capturado en python

En mi caso el tamaño supera lo permitido por lo tanto la bd (en el contenedor) lanza la excepción que termina capturando el script de python (en mi maquina host)

mysql.connector.errors.OperationalError: 2055: Lost connection to MySQL server at 'host.docker.internal:3306', 
system error: 10054 Se ha forzado la interrupción de una conexión existente por el host remoto
The above exception was the direct cause of the following exception:   
Traceback (most recent call last):
...

La solución

Hay que editar el fichero y aumentar el tamaño

# nos conectamos al contenedor docker exec --user="root" -it contenedor-db # para editar el archivo necesito vim y para instalar vim tengo que actualizar los paquetes del linux del contenedor apt-get update # instalo vim apt-get install vim

Valores antes de la edición

#bind-address           = 127.0.0.1
#
# * Fine Tuning
#
...
max_allowed_packet      = 16M
thread_cache_size       = 128
sort_buffer_size        = 4M
bulk_insert_buffer_size = 16M
...  
[mysqldump]
...
max_allowed_packet      = 100M

Valores después

#bind-address           = 127.0.0.1
#
# * Fine Tuning
#
...
max_allowed_packet      = 100M
thread_cache_size       = 128
sort_buffer_size        = 4M
bulk_insert_buffer_size = 100M
...  
[mysqldump]
quick
quote-names
max_allowed_packet      = 100M

Reiniciamos el contenedor

docker restart contenedor-db

Después de ejecutar el script en python

#Resultado despues de ejecutar nuevamente el script en python:
[2021-03-06 21:49:51,726] INFO     base:769[_commit_impl] COMMIT    

Autor: Eduardo A. F.
Publicado: 06-03-2021 22:10