Am o problema cu câmpuri BLOB în baza de date MySQL - atunci când încărcarea fișierelor mai mari de aprox 1MB primesc o eroare Pachete mai mari decât max_allowed_packet nu sunt permise.
Aici este ceea ce am'am incercat:
În MySQL Query Browser am făcut o emisiune de variabile cum ar fi 'max_allowed_packet'` care mi-a dat 1048576.
Atunci am executa interogarea set global max_allowed_packet=33554432", urmat de " show variabile ca 'max_allowed_packet'
- dă-mi 33554432 cum era de așteptat.
Dar când m-am reporniți serverul MySQL magic merge înapoi la 1048576. Cu ce am gresit aici?
Bonus întrebare, este posibil pentru a comprima un câmp BLOB?
Schimbarea mea.ini "sau"~/.meu.cnfde fișiere, inclusiv de către o singură linie sub
[mysqld] " sau " [client] secțiune în fișierul dvs.:
max_allowed_packet=500M
apoi reporniți serviciul MySQL și ați terminat.
Vezi documentația pentru mai multe informații.
De max_allowed_packet variabila poate fi setat la nivel global prin rularea unei interogări.
Cu toate acestea, dacă nu se schimbă în meu.ini
(ca dragon112 sugerat), valoarea se va reseta atunci când serverul se restarteaza, chiar dacă îl setați la nivel global.
Pentru a schimba max permis de pachete pentru toată lumea de la 1GB până la repornirea serverului:
SET GLOBAL max_allowed_packet=1073741824;
Unul dintre dezvoltatorii de juniori a fost o problemă modificarea asta pentru mine, așa că am crezut că mi-ar extinde acest lucru în detaliu mai mare pentru utilizatorii de linux:
deschideți terminal
ssh root@YOURIP
introduceți parola de root
nano /etc/mysql/my.cnf (în cazul în care comanda nu este recunoscut de a face acest lucru în primul rând sau încercați să vi apoi repetați: yum install nano )
adauga linia: max_allowed_packet=256M (evident ajusta dimensiunea pentru orice ai nevoie) sub [MYSQLD] secțiune. El a făcut o greșeală de a pune-l la partea de jos a fișierului prima deci nu au de lucru.
Control + O (salvare), apoi ENTER (confirmare), apoi Control + X (ieșire fișier)
serviciu mysqld restart
puteți verifica schimbare în secțiunea variabile pe phpmyadmin
Cred că unii ar dori, de asemenea să știe cum să găsească mea.ini fișier de pe PC-ul. Pentru utilizatorii de windows, cred că cel mai bun mod este după cum urmează:
Am primit acest răspuns de la http://bugs.mysql.com/bug.php?id=68516
În urma toate instrucțiunile, aceasta este ceea ce am făcut și lucrat:
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)
Deci, după cum putem vedea, max_allowed_packet a fost schimbat in afara de a mea.ini.
Vă permite să părăsească sesiune și verificați din nou:
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)
Concluzia, după GLOBALE STABILITE max_allowed_packet=1073741824, serverul va avea noul max_allowed_packet până când este repornit, ca cineva s-a afirmat anterior.
Dacă această eroare în timp ce efectuează o copie de rezervă, max_allowed_packet
poate fi setat în meu.cnf
în special pentru mysqldump`.
[mysqldump]
max_allowed_packet=512M
Am păstrat obtinerea această eroare în timp ce efectuează un mysqldumpși nu am înțeles pentru că am avut acest set în
meu.cnf", în cadrul " [mysqld]secțiune. Odată ce am dat seama că pot să-l setați pentru
[mysqldump] și am stabilit valoarea, copiile de rezervă finalizat fără probleme.
Pentru cei care rulează wamp server mysql
Wamp tray Icon -> MySql> meu.ini
[wampmysqld]
port = 3306
socket = /tmp/mysql.sock
key_buffer_size = 16M
max_allowed_packet = 16M // --> changing this wont solve
sort_buffer_size = 512K
Derulați în jos până la capăt, până când găsi u
[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE
Adăugați linia de packet_size în între
[mysqld]
port=3306
max_allowed_packet = 16M
explicit_defaults_for_timestamp = TRUE
Verificați dacă acesta a lucrat cu această interogare
Select @@global.max_allowed_packet;
Multe dintre respondenti văzut problema și-a dat deja solutia.
Vreau doar să sugerez o altă soluție, care este schimbarea Glogal valoarea variabilei din cadrul instrument Mysql Workbench. Care este desigur DACĂ utilizați banc de lucru la nivel local pe server (sau prin conexiune SSH)
Doar conectați la instanță și du-te la meniu:
Server -> Opțiuni de File -> Networking -> max_allowed_packed
Setați valoarea dorită și apoi ai nevoie pentru a * reporniți MySql Serviciu**.
Această eroare veni din cauza de date conține mai mare decât valoarea setată.
Doar scrie max_allowed_packed=500M
sau puteti calcula că 500*1024k și de a folosi că în loc de 500M, dacă vrei.
Acum doar restart la MySQL.
Pentru oricine care rulează MySQL de pe Amazon RDS service, această schimbare se face prin parametru grupuri. Aveți nevoie pentru a crea un nou PG sau să utilizați una existentă (alta decât cea implicită, care este read-only).
Tu ar trebui să căutare pentru max_allowed_packet
parametru, schimba valoarea sa, și apoi a lovit salva.
Înapoi în MySQL exemplu, dacă ați creat un nou PG, trebuie să atașați la PG la instanță (poate ai nevoie de un reboot). Daca ai schimbat un PG care a fost deja atașat de exemplu, modificările vor fi aplicate fără repornirea sistemului, pentru toate cazurile care au ca PG atașat.