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_sizeдо 4G и позже 1G (также 1024M) в дополнение к размеру файла журнала, но mysql не будет начинаться с этих значений. Если я вернусь к 512M, MySQL начнет нормально.

Как я могу решить это? Мой сервер 16 ГБ, и, согласно Webmin 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: использование встроенного в Linux AIO

120529 10:29:33 InnoDB: Инициализация пула буферов, размер = 1,0 ГБ

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

InnoDB: Ошибка: файл журнала ./ib_logfile0 имеет другой размер 0 134217728 байт

InnoDB: чем указано в файле .cnf 0 268435456 байт!

giorgio79
источник
Не могли бы вы поделиться журналами ошибок для этого ...
Абдул Манаф
Спасибо, мне удалось его найти. Я думаю, что это будет проще. Я должен был также изначально добавить, что я увеличил размер файла журнала, чтобы он соответствовал увеличению в пуле буферов (я действительно добавил эту информацию сейчас).
giorgio79
Хорошо @ giorgio79 ...
Абдул Манаф
Попробуйте удалить файл журнала (ов).
Дезсо
Вы сначала удалили размер файла журнала? Вы сначала сбросили все базы данных? Пожалуйста, добавьте больше информации о том, что именно вы делали?
ALH

Ответы:

19

Два ответа, данные @RickJames и @drogart , по сути являются средствами правовой защиты. (+1 за каждого).

Прямо из журнала ошибок, который вы представляете, последние две строки говорят:

InnoDB: Ошибка: файл журнала ./ib_logfile0 имеет другой размер 0 134217728 байт

InnoDB: чем указано в файле .cnf 0 268435456 байт! `

В этот момент было очевидно, что для innodb_log_file_size установлено значение 256M (268435456), my.cnfа для журналов транзакций InnoDB ( ib_logfile0, ib_logfile1) соответственно по 128M (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.

RolandoMySQLDBA
источник
Спасибо, да я не удалил их первым. Просто хотел посмотреть, как ведет себя mysql. После выполнения шага 3 перезагрузка сработала.
giorgio79
1
Я думаю, что не следует удалять файлы журналов, а скорее перемещать их в другое место и удалять их через некоторое время, когда вы успешно изменили размер файла журнала. В противном случае у вас возникнут проблемы, если MySQL потерпит крах до запуска service mysqld stop.
КаджМагнус
4

Исходя из ошибки в журнале, я предполагаю, что вы сделали это:

  • отключить MySQL
  • отредактировал my.cnf для изменения размера файла журнала innodb
  • попробовал запустить mysql (потом не получилось)

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

Я бы порекомендовал переместить старые файлы в другой каталог, а не просто удалять их, пока сервер не будет запущен с новыми файлами журналов и все выглядит нормально.

drogart
источник
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 - новые файлы журнала будут перестроены.
Рик Джеймс
источник
Спасибо, да, это тоже правильный ответ. Я мог принять только один, хотя. +1 тоже это.
giorgio79
1

Также может быть некоторая проблема в вашем значении для размера пула буферов . как это случилось в моем случае ...

При увеличении или уменьшении innodb_buffer_pool_sizeоперация выполняется порциями. Размер порции определяется параметром innodb_buffer_pool_chunk_sizeконфигурации, который по умолчанию составляет 128M. Для получения дополнительной информации см. Настройка размера куска пула буферов 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равно 128M, что является значением по умолчанию.

8G является допустимым innodb_buffer_pool_sizeзначением, потому что 8G является кратным innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, который является 2G.

Шиви
источник