Так что я довольно новичок в настройке InnoDB. Я медленно меняю таблицы (при необходимости) с MyIsam на InnoDB. У меня есть около 100 МБ в innodb, поэтому я увеличил innodb_buffer_pool_size
переменную до 128 МБ:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Когда я пошел, чтобы изменить innodb_log_file_size
значение (например, my.cnf на странице конфигурации mysql в комментариях к innodb, чтобы изменить размер файла журнала на 25% от размера буфера. Итак, теперь мой my.cnf выглядит так:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Когда я перезагружаю сервер, я получаю эту ошибку:
110216 9:48:41 InnoDB: Инициализация пула буферов, размер = 128.0M
110216 9:48:41 InnoDB: Завершена инициализация пула буферов
InnoDB: Ошибка: файл журнала ./ib_logfile0 имеет другой размер 0 5242880 байт
InnoDB: чем указано в файл .cnf 0 33554432 байт!
110216 9:48:41 [ОШИБКА] Плагин 'Функция инициализации InnoDB' вернула ошибку.
110216 9:48:41 [ОШИБКА] Ошибка регистрации плагина InnoDB в качестве ДВИГАТЕЛЯ ХРАНЕНИЯ.
Итак, мой вопрос: безопасно ли удалить старые log_files или есть другой способ изменить innodb_log_file_size
переменную?
Ответы:
Да, безопасно удалить файл журнала после завершения работы mysqld
В свете этого просто выполните следующие шаги:
Запуск mysqld воссоздаст
ib_logfile0
иib_logfile1
Попробуйте!
ОБНОВЛЕНИЕ 2011-10-20 16:40 ПО ВОСТОЧНОМУ ВРЕМЕНИ
Он аккуратно выводит все данные из пула буферов InnoDB перед повторным редактированием файлов журналов, вы должны установить эту опцию примерно за 1 час до выключения:
По умолчанию innodb_max_dirty_pages_pct имеет значение 75 (MySQL 5.5+) или 90 (до MySQL 5.5). Установка этого значения в ноль сохраняет количество грязных страниц менее 1% от пула буферов InnoDB. Выполнение
service mysql stop
делает это в любом случае. Кроме того, завершение работы завершит все оставшиеся элементы в журнале повторов. Чтобы сохранить эту опцию, просто добавьте ее в /etc/my.cnf:ОБНОВЛЕНИЕ 2013-04-19 16:16 ПО ВОСТОЧНОМУ ВРЕМЕНИ
Я немного обновил свой ответ с помощью innodb_fast_shutdown, потому что для этого я перезапускал mysql и останавливал mysql. Теперь этот один шаг жизненно важен, потому что каждая незафиксированная транзакция может иметь другие движущиеся части внутри и за пределами журналов транзакций InnoDB ( см. Инфраструктура InnoDB ).
Обратите внимание, что установка innodb_fast_shutdown в 2 также очистит журналы, но больше движущихся частей все еще существует и будет выбрано в Crash Recovery во время запуска mysqld. Установка 0 лучше.
источник
SET GLOBAL innodb_fast_shutdown = 0;
. Когда MySQL завершает работу, все транзакции сбрасываются со всех движущихся частей, включая журналы повторов (ib_logfile0 и ib_logfile1). Можно их сохранить. Мне еще не приходилось сталкиваться с проблемами с полностью очищенными журналами.Вместо этого я бы порекомендовал официальный метод , который я привожу здесь для удобства:
источник
innodb_buffer_pool_size
просто изменитеmy.cnf
(my.ini
) и перезапустите mysqld.innodb_log_file_size
менее критично. Не меняйте его, если нет причин. Роланд представил шаги , но меня беспокоит один аспект ... Я не знаю, важны ли первые два шага; кажется, что они могут быть:set innodb_fast_shutdown = OFF
Файлы журнала отслеживают незаконченные дела; «
innodb_fast_shutdown
» говорит, чтобы иметь дело с этим материалом после перезапуска. Таким образом, удаление файлов может потерять информацию?Новые версии улучшили вещи: (больше обсуждения в комментариях)
innodb_log_file_size
> 4 ГБinnodb_log_file_size
можно изменить без предварительного удаления iblog *innodb_buffer_pool_size
Должен ли я изменить log_file_size?
Используйте
GLOBAL STATUS
для вычисления количества минут до циклов регистрации.Если оно намного меньше 60 (минут), это может помочь увеличить log_file_size. Если это намного больше, тогда файлы журнала тратят впустую дисковое пространство. Этот «1 час» довольно произвольный, поэтому, если вы близки к нему, не беспокойтесь об изменении log_file_size.
Оставьте
innodb_log_files_in_group
по умолчанию 2.источник
--skip-networking
заставлял клиентов включать и выключать MySQL в качестве меры предосторожности, чтобы эти изменения были сделаны в последнюю минуту. Ваша первая строка (set innodb_fast_shutdown = OFF) устраняет это. +1 !!!innodb_log_file_size
была увеличена , чтобы изменить его , не снимая iblog файлы.Когда вы входите в MySQL, введите эти команды:
Вы получите два номера. Сначала вы получаете один, а затем подождите минуту. Вы получите другой.
Скажем, первый - 3.456.718.123, а второй - 4.098.873.134.
Сейчас (4.098.873.134-3.856.718.123) * 60/1024/1024
Результат = 13,856 МБ
У вас есть два файла журнала. Так что разделите его на два, и вы получите число около 7.000 МБ. Просто чтобы быть уверенным, установите размер файла журнала 8GB
источник
Log File Size
в dba.stackexchange.com/questions/23189/… )chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service mysql restart || перезапуск службы mysql
Попробуйте, гарантированно будет работать [проверено на Debian 6]
источник