не буде запущено mysql після збільшення innodb_buffer_pool_size та innodb_log_file_size


18

Я дотримуюся цього рішення тут /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 і спробував збільшити мій innodb_buffer_pool_size4G і пізніше 1G (також 1024M) у крім розміру файлу журналу, але mysql не буде починатися з цих значень. Якщо я поверну його до 512M, mysql починається нормально.

Як я можу це вирішити? Мій сервер об'ємом 16 Гб, і відповідно до веб-даних sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Тим часом я знайшов і журнал помилок:

120529 10:29:32 mysqld_safe mysqld з pid-файлу /var/run/mysqld/mysqld.pid закінчився

120529 10:29:33 mysqld_safe Запуск демона mysqld з базами даних з / var / lib / mysql

120529 10:29:33 [Примітка] Плагін "FEDERATED" вимкнено.

120529 10:29:33 InnoDB: Купа пам'яті InnoDB вимкнена

120529 10:29:33 InnoDB: Мутекси та rw_locks використовують атомні вбудовані GCC

120529 10:29:33 InnoDB: Стислі таблиці використовують zlib 1.2.3

120529 10:29:33 InnoDB: Використання рідного AIO Linux

120529 10:29:33 InnoDB: Ініціалізація буферного пулу, розмір = 1,0 Г

120529 10:29:33 InnoDB: Завершена ініціалізація пулового буфера

InnoDB: Помилка: файл журналу ./ib_logfile0 має різний розмір 0 134217728 байт

InnoDB: ніж зазначено у .cnf-файлі 0 268435456 байт!


Чи можете ви поділитися журналами помилок для цього ...
Абдул Манаф

Дякую, мені вдалося його знайти. Я думаю, що це буде простіше. Я також повинен був спочатку додати, що я збільшив розмір файлу журналу, а також відповідати збільшенню пулу буферів (я цю інформацію зараз додав).
giorgio79

Ок @ giorgio79 ...
Абдул Манаф

Спробуйте видалити файли журналу.
dezso

Ви видалили розмір файлу журналу спочатку? Ви спочатку скинули всі бази даних? Будь ласка, додайте більше інформації про те, що ви робили саме?
ALH

Відповіді:


19

Два відповіді, отримані від @RickJames та @drogart , по суті є засобами захисту. (+1 для кожного).

Прямо з представленого журналу помилок останні два рядки кажуть:

InnoDB: Помилка: файл журналу ./ib_logfile0 має різний розмір 0 134217728 байт

InnoDB: ніж зазначено у .cnf-файлі 0 268435456 байт! `

У цей момент було видно, що ви встановили innodb_log_file_size до 256 М (268435456), my.cnfтоді як журнали транзакцій InnoDB ( ib_logfile0, ib_logfile1) відповідно складали 128 М (134217728). Переглядаючи посилання на мою відповідь StackOverflow у вашому запитанні, ви повинні зробити наступне:

Крок 01) Додайте це до my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Крок 02) Запустіть ці команди в ОС

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

Щоб мати впевненість у тому, що відбувається, біжіть tail -fпроти журналу помилок. Ви побачите повідомлення про те, коли створюється кожен файл журналу innodb.


Дякую, так, я їх не видалив спочатку. Просто хотілося подивитися, як поводиться mysql. Після виконання кроку 3 перезапуск працював.
giorgio79

1
Я думаю, що не слід видаляти файли журналів, а скоріше перемістити їх в інше місце та видалити їх трохи пізніше, коли ви успішно змінили розмір файлу журналу. В іншому випадку ви матимете біду, якщо MySQL зазнав аварії, перш ніж бігти service mysqld stop.
KajMagnus

4

Виходячи з помилки в журналі, я припускаю, що ви це зробили:

  • закрити mysql
  • редагував my.cnf, щоб змінити розмір файлу журналу innodb
  • намагався запустити mysql (тоді не вдалося)

Якщо ви зміните розмір файлу журналу, потрібно видалити старі файли журналу. Innodb не запуститься успішно, якщо існуючі файли не відповідають заданому розміру в конфігураційному файлі. Якщо ви перемістите їх в інше місце, innodb створить нові файли журналу транзакцій потрібного розміру при його запуску.

Я рекомендую перенести старі файли в інший каталог, а не просто видаляти їх, поки сервер не працює і не працює з новими файлами журналу, і все не виглядатиме нормально.


3

У випадку buffer_pool слід встановити приблизно 70% доступної оперативної пам’яті, якщо ви працюєте лише з InnoDB.

Розмір журналу не має великого значення. Оптимальним є встановити його таким чином, щоб (Uptime * innodb_log_file_size / Innodb_os_log_written) було приблизно 3600 (1 година).

Щоб змінити розмір журналу, необхідно

  1. закрити mysqld чисто
  2. видалити значення в my.cnf (my.ini)
  3. видалити файли журналу
  4. retstart - нові файли журналів будуть відновлені.

Дякую, так, це також правильна відповідь. Я міг би прийняти лише одне. + 1d це теж.
giorgio79

1

Також може бути певна проблема у вашій вартості, передбачена розміром пулу буфера . як це сталося в моєму випадку ...

При збільшенні або зменшенні innodb_buffer_pool_sizeоперація виконується шматками. Розмір шматка визначається параметром innodb_buffer_pool_chunk_sizeконфігурації, який за замовчуванням становить 128 Мб. Додаткову інформацію див. У розділі Налаштування розміру буфера пулу InnoDB .

Розмір пулу буфера завжди повинен бути рівним або кратним innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Якщо ви налаштовуєте innodb_buffer_pool_sizeна значення, яке не дорівнює або кратно innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, розмір пулу буфера автоматично підлаштовується до значення, яке дорівнює або кратне, innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesщо не менше вказаного розміру пулу буфера.

У прикладі innodb_buffer_pool_sizeвстановлено значення 8G, а innodb_buffer_pool_instancesвстановлено 16. innodb_buffer_pool_chunk_sizeЦе 128М, що є значенням за замовчуванням.

8G - дійсне innodb_buffer_pool_sizeзначення, оскільки 8G є кратним innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, що становить 2G.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.