sql >> Databasteknik >  >> RDS >> Mysql

PHP Mysql PDO:Allmänt fel:2006 MySQL-server har försvunnit

Några andra vanliga orsaker till att MySQL-servern har försvunnit fel är:

  • Du (eller db-administratören) har dödat den pågående tråden med en KILL-sats eller ett mysqladmin kill-kommando.

  • Du försökte köra en fråga efter att ha stängt anslutningen till servern. Detta indikerar ett logiskt fel i applikationen som bör korrigeras.

  • En klientapplikation som körs på en annan värd har inte de nödvändiga rättigheterna för att ansluta till MySQL-servern från den värden.

  • Du fick en timeout från TCP/IP-anslutningen på klientsidan. Detta kan hända om du har använt kommandona:mysql_options(..., MYSQL_OPT_READ_TIMEOUT,...) eller mysql_options(..., MYSQL_OPT_WRITE_TIMEOUT,...). I det här fallet kan en ökad timeout hjälpa till att lösa problemet.

  • Du har stött på en timeout på serversidan och den automatiska återanslutningen i klienten är inaktiverad (återanslutningsflaggan i MYSQL-strukturen är lika med 0).

  • Du använder en Windows-klient och servern hade avbröt anslutningen (förmodligen för att wait_timeout löpte ut) innan kommandot utfärdades.

  • Problemet på Windows är att MySQL i vissa fall inte får ett felmeddelande från OS när man skriver till TCP/IP-anslutningen till servern, utan får istället felet när man försöker läsa svaret från anslutningen.

  • Lösningen på detta är att antingen göra en mysql_ping() på anslutningen om det har gått länge sedan den senaste frågan (det här gör Connector/ODBC) eller sätta wait_timeout på mysqld-servern så högt att det i praktiken aldrig gånger ut.

  • Du kan också få dessa fel om du skickar en fråga till servern som är felaktig eller för stor. Om mysqld tar emot ett paket som är för stort eller ur funktion antar det att något har gått fel med klienten och stänger anslutningen. Om du behöver stora frågor (till exempel om du arbetar med stora BLOB-kolumner) kan du öka frågegränsen genom att ställa in serverns max_allowed_packet-variabel, som har ett standardvärde på 4MB. Du kan också behöva öka den maximala paketstorleken på klientsidan. Mer information om att ställa in paketstorleken finns i avsnitt B.5.2.10, "Packet för stort".

  • En INSERT- eller REPLACE-sats som infogar väldigt många rader kan också orsaka den här typen av fel. Endera av dessa satser skickar en enda begäran till servern oavsett antalet rader som ska infogas; Därför kan du ofta undvika felet genom att minska antalet rader som skickas per INSERT eller REPLACE.

  • Du får också en förlorad anslutning om du skickar ett paket på 16 MB eller större om din klient är äldre än 4.0.8 och din server är 4.0.8 och högre, eller tvärtom.

  • Det är också möjligt att se detta fel om värdnamnssökningar misslyckas (till exempel om DNS-servern som din server eller ditt nätverk förlitar sig på går ner). Detta beror på att MySQL är beroende av värdsystemet för namnupplösning, men har inget sätt att veta om det fungerar – ur MySQL:s synvinkel går problemet inte att skilja från någon annan nätverkstidsgräns.

  • Du kan också se felet att MySQL-servern har gått bort om MySQL startas med alternativet --skip-nätverk.

  • Ett annat nätverksproblem som kan orsaka detta fel uppstår om MySQL-porten (standard 3306) blockeras av din brandvägg, vilket förhindrar anslutningar alls till MySQL-servern.

  • Du kan också stöta på det här felet med applikationer som delar underordnade processer, som alla försöker använda samma anslutning till MySQL-servern. Detta kan undvikas genom att använda en separat anslutning för varje underordnad process.

  • Du har stött på en bugg där servern dog medan du körde frågan.

Kolla denna länk:Borta bort




  1. Fixar trasig UTF-8-kodning

  2. VISA DATABASER Motsvarar SQL Server – sp_databases

  3. Kan inte ansluta till MySQL-servern på '127.0.0.1' (10061) (2003)

  4. Ersätt flera tecken i en sträng i SQL Server (T-SQL)