it-swarm-eu.dev

binární protokol mysql dělá disk plný

Najednou jsem dostal svůj web dolů (drupal 6.19) a nemohl jsem spustit mysql (příliš mnoho tabulek havarovalo). kontrolou df -h jsem zjistil, že oddíl MySQL je plný kvůli velmi velkým souborům binárních souborů (binární protokoly uchovávám pouze jeden den, - expire_logs_days = 1); zkontrolováním mysqlbinlog pro jeden z protokolů bin jsem zjistil, že většina položek je pro tabulky mezipaměti (cache_form, boost_cache, boost_cache_relationships, cache_content atd.) a pro relační tabulku; některá data se mnohokrát opakují.
Mimochodem, mám sledujte ls -lh a bin-log soubory se zvětšovaly exponenciálně (každou jednu nebo dvě minuty jsem dostal nový binlog soubor s 100M velikostí souboru !!)

Máte představu, co to způsobuje? Jak mohu tento problém vyřešit?

7
Alaa

Myslím, že jedním zjevným zlepšením by bylo použití jiného backendu cache.

Pokud máte jediný server a dostatek paměti, můžete použít backend APC (D6: http://drupal.org/project/cacherouter , D7: http: // drupal). org/project/apc ) mít různé často používané mezipaměti přímo ve sdílené paměti. To je pravděpodobně nejrychlejší řešení mezipaměti, které můžete získat.

Další alternativou je Memcached , což je zvláště zajímavé, pokud máte více serverů, které by měly sdílet mezipaměť.

Všimněte si, že nemůžete přesunout cache_form, protože to obsahuje informace o aktuálně zobrazených formulářích a ve skutečnosti to není cache, protože obsahuje jedinečné informace, nejen agregované věci jako ostatní, které lze vždy vymazat. Také některé další mezipaměti, zejména cache_update, můžete chtít ponechat v databázi, protože to by nemělo být vymazáno jako zbytek, protože obsahuje informace o aktualizacích použitých modulů, něco, co se nemění , které často a může být velmi pomalé znovu načíst, pokud je jich mnoho.

Můžete také přesunout informace o relacích z databáze, například je můžete umístit do MongoDB a pravděpodobně existují i ​​další.

6
Berdir

Zkontrolovali jste datum protokolů bin? expire_logs_days nastavení není "auto-magie". To se projeví pouze při restartování mysql nebo při provádění příkazu flush_logs nebo kdy max_binlog_size.

Poté by mysql měl otočit aktuální soubor protokolu (vytvořit nový) a odstranit soubory starší než 1 den (ve vašem případě)

Pokuste se nastavit toto poslední nastavení ve vašem my.cnf a zjistěte, zda funguje společně s expire_log_days .

2
corbacho