не буде запущено 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.