Как безопасно изменить mysql innodb переменную 'innodb_log_file_size'?

dba.stackexchange https://dba.stackexchange.com/questions/1261

  •  16-10-2019
  •  | 
  •  

Вопрос

Так что я довольно новичок в настройке 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,0 м
110216 9:48:41 Innodb: завершенная инициализация буферных пулов
Innodb: ошибка: файл журнала ./ib_logfile0 имеет разное значение 0 5242880 байт
Innodb: чем указано в файле .cnf 0 335544432 байт!
110216 9:48:41.
110216 9:48:41 [Ошибка] Плагин 'innodb' Регистрация в качестве двигателя хранения.

Итак, мой вопрос: безопасно ли удалить старый log_files, или есть другой метод для изменения innodb_log_file_size переменная?

Это было полезно?

Решение

Да, это безопасно удалить файл журнала после выключения MySQLD

В свете этого просто выполните следующие шаги:

mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
service mysql stop
mv /var/lib/mysql/ib_logfile[01] /tmp
service mysql start

Запуск mysqld будет воссоздать ib_logfile0 а также ib_logfile1

Попробуй !!!

Обновление 2011-10-20 16:40 EDT

Он чисто разыгрывает все данные в пуле буферов InnoDB перед повторным изменением файлов журнала, вы должны установить эту опцию примерно за 1 час до выключения:

SET GLOBAL innodb_max_dirty_pages_pct = 0;

По умолчанию, innodb_max_dirty_pages_pct 75 (MySQL 5,5+) или 90 (до MySQL 5.5). Установка этого на ноль сохраняет количество грязных страниц менее 1% от пула буферов InnoDB. Исполнение service mysql stop все равно делает это. Кроме того, выключение завершит любые оставшиеся элементы в журнале redo. Чтобы сохранить эту опцию, просто добавьте его в /etc/my.cnf:

[mysqld]
innodb_max_dirty_pages_pct = 0

Обновление 2013-04-19 16:16 EDT

Я еще больше обновил свой ответ innodb_fast_shutdown Потому что я привык перезапустить MySQL и остановить MySQL, чтобы сделать это. Теперь этот один шаг жизненно важен, потому что в каждой незаконной транзакции могут быть другие движущиеся части внутри и за пределами журналов транзакций InnoDB (Смотрите инфраструктуру Innodb).

Обратите внимание, что настройка innodb_fast_shutdown Чтобы 2 также очистили журналы, но больше движущихся деталей все еще существуют и выбираются при восстановлении с аварией во время стартапа MySQLD. Установка 0 является лучшим.

Другие советы

Вместо этого я бы порекомендовал официальный метод, что я воспроизводил здесь для удобства:

Чтобы изменить номер или размер файлов журналов InnoDB Mysql 5.6.7 или раньше, используйте следующие инструкции. Процедура для использования зависит от значения innodb_fast_shutdown, которая определяет, следует ли полностью привлечь системное табличное пространство перед операцией отключения:

  • Если innodb_fast_shutdown не установлен на 2: Остановите сервер MySQL и убедитесь, что он выключается без ошибок, чтобы убедиться, что нет информации о выдающихся транзакциях в журнале REDO. Скопируйте старые файлы журнала Redo в безопасное место, если что -то пошло не так во время отключения, и вам нужно, чтобы они восстановили табличное пространство. Удалите старые файлы журнала из каталога файлов журнала, отредактируйте my.cnf, чтобы изменить конфигурацию файла журнала, и снова запустите сервер MySQL. MySQLD видит, что в запусках не существует файлов журнала InnoDB и создает новые.

  • Если innodb_fast_shutdown установлен на 2: установить innodb_fast_shutdown на 1:

mysql> SET GLOBAL innodb_fast_shutdown = 1;

Затем следуйте инструкциям в предыдущем пункте.

На сфере MySQL 5.6.8, Настройка InnoDB_FAST_SHUTDOWN больше не имеет отношения при изменении числа или размера файлов журналов InnoDB. Кроме того, вам больше не требуется удалять старые файлы журнала, хотя вы все равно можете скопировать старые файлы журнала в безопасное место в качестве резервной копии. Чтобы изменить номер или размер файлов журнала InnoDB, выполните следующие шаги:

  1. Остановите сервер MySQL и убедитесь, что он выключается без ошибок.

  2. Измените my.cnf, чтобы изменить конфигурацию файла журнала. Чтобы изменить размер файла журнала, настройте innodb_log_file_size. Чтобы увеличить количество файлов журнала, настройте innodb_log_files_in_group.

  3. Запустите сервер MySQL снова.

Если InnoDB обнаружит, что innoDB_LOG_FILE_SIZE отличается от размера файла журнала REDO, он напишет журнал Checkpoint, закройте и удалит старые файлы журнала, создайте новые файлы журнала в запрошенном размере и откроет новые файлы журнала.

innodb_buffer_pool_size - просто измените my.cnf (my.iniи перезапустить MySQLD.

innodb_log_file_size менее критичен. Не меняйте его, если нет причины. Роланд предоставил шаги, но один аспект беспокоит меня ... Я не знаю, важны ли первые два шага; кажется, что они могут быть:

  1. set innodb_fast_shutdown = OFF
  2. Перезагрузить MySQL
  3. Остановить MySQL
  4. Удалите файлы журнала
  5. Начните MySQL

Файлы журнала следят за незаконченным бизнесом; "innodb_fast_shutdown"говорит, чтобы справиться с этим материалом после перезапуск. Таким образом, удаление файлов может потерять информацию?

Новые версии улучшили вещи: (Больше обсуждения в комментариях)

  • 5.6 позволяет innodb_log_file_size > 4 ГБ
  • 5.6 innodb_log_file_size можно изменить без первого удаления iblog*
  • 5.7 позволяет динамически изменять размеры innodb_buffer_pool_size

Стоит ли менять log_file_size?

Использовать GLOBAL STATUS Чтобы вычислить количество минут до цикла журнала.

Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`

Если это много меньше чем 60 (минуты), тогда это может помочь увеличить log_file_size. Если это гораздо больше, то файлы журналов тратят на дисковое пространство. Этот «1 час» довольно произвольный, поэтому, если вы близки к нему, не беспокойтесь об изменении log_file_size.

Оставлять innodb_log_files_in_group По умолчанию 2.

Когда вы войдете в MySQL, введите эти команды:

pager grep seq;
show engine innodb status \G select sleep(60); show engine innodb status \G

Вы получите два числа. Сначала вы получите один, а затем ждите минуту. Вы получите другой.

Скажем, первый - 3.456.718.123, а второй - 4.098.873.134

Теперь (4.098.873.134-3.856.718.123)*60/1024/1024

Результат = 13,856 МБ

У вас есть два файла журнала. Так что рад на два, и вы получите число около 7,000 МБ. Просто чтобы быть уверенным, установите размер файла журнала 8 ГБ

chown mysql: mysql -r/etc/mysql/var/lib/mysql && cd/var/lib/mysql && rm -f ib_logfile* && service mysql restart || Служба перезапуска MySQL

Попробуйте, гарантированно будет работать [проверено на Debian 6

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top