it-swarm-eu.dev

mysql nebude spuštěn po zvýšení innodb_buffer_pool_size a innodb_log_file_size

Sleduji toto řešení zde https://stackoverflow.com/questions/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 a pokusil se zvýšit moje innodb_buffer_pool_size až 4G a později 1G (také 1024M) kromě velikosti souboru protokolu, ale mysql s těmito hodnotami nezačne. Kdybych to vrátil na 512M, mysql začíná dobře.

Jak to mohu vyřešit? Můj server je 16 GB a podle Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Mezitím jsem také našel protokol chyb:

120529 10:29:32 mysqld_safe mysqld ze souboru pid /var/run/mysqld/mysqld.pid skončil

120529 10:29:33 mysqld_safe Spuštění démona mysqld s databázemi z/var/lib/mysql

120529 10:29:33 [Poznámka] Plugin 'FEDERATED' je deaktivován.

120529 10:29:33 InnoDB: Hromada paměti InnoDB je zakázána

120529 10:29:33 InnoDB: Mutexy a rw_locks používají atomové vestavěné GCC

120529 10:29:33 InnoDB: Komprimované tabulky používají zlib 1.2.3

120529 10:29:33 InnoDB: Používání nativního Linuxu AIO

120529 10:29:33 InnoDB: Inicializace fondu vyrovnávacích pamětí, velikost = 1,0 G

120529 10:29:33 InnoDB: Dokončená inicializace fondu vyrovnávacích pamětí

InnoDB: Chyba: soubor protokolu ./ib_logfile0 má jinou velikost 0 134217728 bajtů

InnoDB: než je uvedeno v souboru .cnf 0 268435456 bajtů!

18
giorgio79

Dvě odpovědi poskytnuté z @ RickJames a @ drogart jsou v podstatě nápravné prostředky. (+1 pro každého).

Hned od protokolu chyb, který uvedete, poslední dva řádky říkají:

InnoDB: Chyba: soubor protokolu ./ib_logfile0 má jinou velikost 0 134217728 bajtů

InnoDB: než je uvedeno v souboru .cnf 0 268435456 bajtů! `

V tomto okamžiku bylo zřejmé, že jste nastavili innodb_log_file_size na 256M (268435456) v my.cnf zatímco protokoly transakcí InnoDB (ib_logfile0, ib_logfile1) bylo 128M (134217728). Při zpětném pohledu na odkaz na moji odpověď StackOverflow ve své otázce jste museli udělat následující:

Krok 01) Přidejte toto do my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Krok 02) Spusťte tento příkaz v OS

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Chcete-li mít důvěru v to, co se děje, spusťte tail -f proti protokolu chyb. Uvidíte zprávu, která vám řekne, kdy se vytváří každý soubor protokolu innodb.

19
RolandoMySQLDBA

Na základě chyby v protokolu se domnívám, že jste to udělali:

  • vypněte mysql
  • editoval my.cnf, aby změnil velikost souboru protokolu innodb
  • pokusil se spustit mysql (pak to selhalo)

Pokud změníte velikost souboru protokolu, musíte odstranit staré soubory protokolu. Innodb se nespustí úspěšně, pokud stávající soubory neodpovídají zadané velikosti v konfiguračním souboru. Pokud je přesunete jinam, vytvoří společnost innodb při spuštění nové soubory protokolu transakcí správné velikosti.

Doporučil bych přesunout staré soubory do jiného adresáře namísto jejich odstranění, dokud nebude server spuštěn s novými protokolovými soubory a všechno nebude v pořádku.

4
drogart

Buffer_pool by měl být nastaven na přibližně 70% z k dispozici RAM, pokud používáte pouze InnoDB).

Na velikosti protokolu nezáleží. Optimální je nastavení tak, aby (Uptime * innodb_log_file_size/Innodb_os_log_written) byl zhruba 3600 (1 hodina).

Chcete-li změnit velikost protokolu, musíte

  1. čistě vypněte mysqld
  2. smazat hodnotu v my.cnf (my.ini)
  3. odstranit soubory protokolu
  4. restartovat - nové soubory protokolu budou znovu sestaveny.
3
Rick James

Ve vaší hodnotě může být také problém s velikostí fondu vyrovnávacích pamětí . jako by se to stalo v mém případě ...

Při zvyšování nebo snižování innodb_buffer_pool_size Se operace provádí v blocích. Velikost bloku je definována konfigurační volbou innodb_buffer_pool_chunk_size, Která má výchozí hodnotu 128 milionů. Další informace viz Konfigurace velikosti bloku vyrovnávací paměti InnoDB .

Velikost fondu vyrovnávacích pamětí musí být vždy stejná nebo násobkem innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Pokud nakonfigurujete innodb_buffer_pool_size Na hodnotu, která se nerovná nebo je násobkem innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, Velikost fondu vyrovnávacích pamětí se automaticky upraví na hodnotu, která se rovná nebo je násobkem innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, která není menší než specifikovaná velikost fondu vyrovnávacích pamětí.

V tomto příkladu je innodb_buffer_pool_size Nastavena na 8G a innodb_buffer_pool_instances Je nastavena na 16. innodb_buffer_pool_chunk_size Je 128M, což je výchozí hodnota.

8G je platná hodnota innodb_buffer_pool_size, Protože 8G je násobkem innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, Což je 2G.

1
SHIVI