sql >> Databáze >  >> RDS >> Mysql

Když je odeslán SIGTERM, ukončí podřízený proces připojení mysql?

Po dokončení procesu (buď proto, že se ukončí, nebo je ukončen pomocí signálu) jsou všechny soubory a připojení, které ponechává otevřené, automaticky zavřeny operačním systémem. Neuzavře se čistě pomocí protokolu MySQL pro uzavření připojení (za předpokladu, že nějaké existuje). Jednoduše se zruší na úrovni TCP/IP a server na druhé straně zjistí, že mluví se zavřenými dveřmi. Ne vždy se to stane okamžitě, někdy to nějakou dobu trvá, než si server všimne, že diskusní partner je pryč. Když k tomu dojde, považuje připojení za přerušené a vyčistí věci na své straně.

Ne před použitím fork() otevřete připojení MySQL v nadřazeném procesu . fork() duplikuje datové struktury používané ke správě místní strany připojení a výsledky jsou nepředvídatelné. Ba co víc, když dítě dokončí (bez ohledu na to jak), uzavře spojení (nebo ho OS přeruší), MySQL server také uzavře svůj konec a nadřazený proces zjistí, že s nikým nemluví.

Před použitím fork() zavřete připojení MySQL v nadřazeném procesu pak podle potřeby otevřete samostatná připojení v nadřazeném a podřízeném procesu.

Také zabalte veškerou komunikaci MySQL se serverem do nadřazeného procesu mezi:

pcntl_sigprocmask(SIG_BLOCK, array(SIGCHLD));

a

pcntl_sigprocmask(SIG_UNBLOCK, array(SIGCHLD));

V opačném případě bude po dokončení podřízeného procesu nadřazený proces upozorněn pomocí SIGCHLD signál. Přijatý signál jej obnoví z režimu spánku (pokud byl náhodou zastaven v sleep() zavolejte, když dorazí signál). Knihovna MySQL používá sleep() jako součást protokolu MySQL pro komunikaci se serverem. Pokud takový sleep() se nuceně vrací dříve, než by mělo (kvůli přijatému signálu), knihovna MySQL je zmatená a nakonec hlásí podivné chyby (např. „MySQL server je pryč“), které ve skutečnosti nejsou správné.

Podívejte se na tuto odpověď pro podrobné vysvětlení.



  1. Jak spojit dva sloupce s jedním serializovaným datem?

  2. Jak se připojit k MySQL z příkazového řádku

  3. Přesun do MariaDB Backup

  4. Vyhledávání v poli utf8_bin v MYSQL rozlišuje velká a malá písmena