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
Cuando el tamaño es mayor al permitido se visualiza el siguiente error 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