Come cambiare la dimensione max_allowed_packet

Sto riscontrando un problema con i campi BLOB nel mio database MySQL – quando carichi file più grandi di circa 1 MB ho un errore Packets larger than max_allowed_packet are not allowed.

Ecco cosa ho provato:

In MySQL Query Browser ho eseguito una show variables like 'max_allowed_packet' che mi ha dato 1048576.

Quindi set global max_allowed_packet=33554432 la query set global max_allowed_packet=33554432 seguita da show variables like 'max_allowed_packet' – mi dà 33554432 come previsto.

Ma quando riavvio il server MySQL torna magicamente a 1048576. Che cosa sto facendo male qui?

Domanda bonus, è ansible comprimere un campo BLOB?

Modifica nel file my.ini o ~/.my.cnf includendo la riga singola sotto la sezione [mysqld] nel tuo file:

 max_allowed_packet=500M 

quindi riavviare il servizio MySQL e il gioco è fatto.

Vedere la documentazione per ulteriori informazioni.

La variabile max_allowed_packet può essere impostata globalmente eseguendo una query.

Tuttavia, se non lo si modifica nel file my.ini (come suggerito da dragon112), il valore verrà reimpostato al riavvio del server, anche se lo si imposta globalmente.

Per modificare il pacchetto massimo consentito per tutti da 1 GB fino al riavvio del server:

 SET GLOBAL max_allowed_packet=1073741824; 

Uno dei miei sviluppatori più giovani stava riscontrando un problema nel modificarlo, quindi ho pensato di estenderlo più in dettaglio agli utenti di Linux:

1) terminale aperto

2) ssh root @ YOURIP

3) inserire la password di root

4) nano /etc/mysql/my.cnf (se il comando non è riconosciuto fallo prima o prova vi, quindi ripeti: yum install nano)

5) aggiungi la riga: max_allowed_packet = 256M (ovviamente regola le dimensioni per qualunque cosa tu abbia bisogno) sotto la sezione [MYSQLD]. Ha commesso un errore nel metterlo in fondo al file, quindi non ha funzionato.

inserisci la descrizione dell'immagine qui

6) Control + O (salva) quindi ENTER (conferma) quindi Control + X (file di uscita)

7) servizio mysqld restart

8) È ansible controllare la modifica nella sezione delle variabili su phpmyadmin

Penso che alcuni vorrebbero anche sapere come trovare il file my.ini sul PC. Per gli utenti di Windows, penso che il modo migliore sia il seguente:

  1. Win + R (collegamento per ‘run’), digitare services.msc , Invio
  2. È ansible trovare una voce come “MySQL56”, fare clic con il tasto destro del mouse su di essa, selezionare Proprietà
  3. È ansible visualizzare sth come “D: / Programmi / MySQL / Server MySQL 5.6 / bin \ mysqld” –defaults-file = “D: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini” MySQL56

Ho ricevuto questa risposta da http://bugs.mysql.com/bug.php?id=68516

Seguendo tutte le istruzioni, questo è quello che ho fatto e lavorato:

 mysql> SELECT CONNECTION_ID();//This is my ID for this session. +-----------------+ | CONNECTION_ID() | +-----------------+ | 20 | +-----------------+ 1 row in set (0.00 sec) mysql> select @max_allowed_packet //Mysql do not found @max_allowed_packet +---------------------+ | @max_allowed_packet | +---------------------+ | NULL | +---------------------+ 1 row in set (0.00 sec) mysql> Select @@global.max_allowed_packet; //That is better... I have max_allowed_packet=32M inside my.ini +-----------------------------+ | @@global.max_allowed_packet | +-----------------------------+ | 33554432 | +-----------------------------+ 1 row in set (0.00 sec) mysql> **SET GLOBAL max_allowed_packet=1073741824**; //Now I'm changing the value. Query OK, 0 rows affected (0.00 sec) mysql> select @max_allowed_packet; //Mysql not found @max_allowed_packet +---------------------+ | @max_allowed_packet | +---------------------+ | NULL | +---------------------+ 1 row in set (0.00 sec) mysql> Select @@global.max_allowed_packet;//The new value. And I still have max_allowed_packet=32M inisde my.ini +-----------------------------+ | @@global.max_allowed_packet | +-----------------------------+ | 1073741824 | +-----------------------------+ 1 row in set (0.00 sec) 

Quindi, come possiamo vedere, il max_allowed_packet è stato modificato all’esterno di my.ini.

Lasciamo la sessione e ricontrolliamo:

 mysql> exit Bye C:\Windows\System32>mysql -uroot -pPassword Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 21 Server version: 5.6.26-log MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SELECT CONNECTION_ID();//This is my ID for this session. +-----------------+ | CONNECTION_ID() | +-----------------+ | 21 | +-----------------+ 1 row in set (0.00 sec) mysql> Select @@global.max_allowed_packet;//The new value still here and And I still have max_allowed_packet=32M inisde my.ini +-----------------------------+ | @@global.max_allowed_packet | +-----------------------------+ | 1073741824 | +-----------------------------+ 1 row in set (0.00 sec) Now I will stop the server 2016-02-03 10:28:30 - Server is stopped mysql> SELECT CONNECTION_ID(); ERROR 2013 (HY000): Lost connection to MySQL server during query Now I will start the server 2016-02-03 10:31:54 - Server is running C:\Windows\System32>mysql -uroot -pPassword Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.6.26-log MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SELECT CONNECTION_ID(); +-----------------+ | CONNECTION_ID() | +-----------------+ | 9 | +-----------------+ 1 row in set (0.00 sec) mysql> Select @@global.max_allowed_packet;//The previous new value has gone. Now I see what I have inside my.ini again. +-----------------------------+ | @@global.max_allowed_packet | +-----------------------------+ | 33554432 | +-----------------------------+ 1 row in set (0.00 sec) 

Conclusione, dopo SET GLOBAL max_allowed_packet = 1073741824, il server avrà il nuovo max_allowed_packet fino al suo riavvio, come qualcuno ha dichiarato in precedenza.

Se si verifica questo errore durante l’esecuzione di un backup, max_allowed_packet può essere impostato in my.cnf particolare per mysqldump .

 [mysqldump] max_allowed_packet=512M 

Ho continuato a ricevere questo errore durante l’esecuzione di un mysqldump e non l’ho capito perché avevo questo set in my.cnf nella sezione [mysqld] . Una volta ho capito che potevo impostarlo per [mysqldump] e ho impostato il valore, i miei backup completati senza problemi.

Per quelli che eseguono il server mysql di wamp

Icona del vassoio di umidità -> MySql -> my.ini

 [wampmysqld] port = 3306 socket = /tmp/mysql.sock key_buffer_size = 16M max_allowed_packet = 16M // --> changing this wont solve sort_buffer_size = 512K 

Scorri fino alla fine finché non trovi

 [mysqld] port=3306 explicit_defaults_for_timestamp = TRUE 

Aggiungi la riga di packet_size tra

 [mysqld] port=3306 max_allowed_packet = 16M explicit_defaults_for_timestamp = TRUE 

Verifica se ha funzionato con questa query

 Select @@global.max_allowed_packet; 

Molti dei rispondenti hanno individuato il problema e hanno già dato la soluzione.

Voglio solo suggerire un’altra soluzione, che sta cambiando il valore della variabile Glogal all’interno dello strumento Mysql Workbench . Questo è naturalmente SE si utilizza Workbench in esecuzione sul server (o tramite connessione SSH)

Ti basta connettersi alla tua istanza e andare sul menu:

Server -> File delle opzioni -> Rete -> max_allowed_packed

Si imposta il valore desiderato e quindi è necessario riavviare MySql Service .

Questo errore deriva dal fatto che i tuoi dati contengono un valore più grande quindi impostato.

Basta scrivere il max_allowed_packed=500M o puoi calcolare quel 500 * 1024k e usarlo al posto di 500M se lo desideri.

Ora basta riavviare MySQL.

Per chiunque esegua MySQL su Amazon RDS, questa modifica viene eseguita tramite gruppi di parametri . È necessario creare un nuovo PG o utilizzarne uno esistente (diverso da quello predefinito, che è di sola lettura).

Dovresti cercare il parametro max_allowed_packet , cambiarne il valore e quindi max_allowed_packet save.

Tornando alla tua istanza MySQL, se hai creato un nuovo PG, dovresti colbind il PG alla tua istanza (potresti aver bisogno di un riavvio). Se hai modificato un PG che era già collegato all’istanza, le modifiche verranno applicate senza riavvio, a tutte le istanze a cui è collegato quel PG.

Se vuoi caricare immagini di grandi dimensioni o dati nel database. Basta cambiare il tipo di dati in 'BIG BLOB' .