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

Итак, я довольно новичок в настройке 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 on mysql's innodb configuration page , чтобы изменить размер файла журнала до 25% от размера буфера. Итак, теперь my 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 [ERROR] Функция инициализации Plugin 'InnoDB' вернула ошибку.
  110216 9:48:41 [ОШИБКА] Регистрация плагина 'InnoDB' в качестве ДВИГАТЕЛЯ ХРАНЕНИЯ не удалась.

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

96 голосов | спросил Derek Downey 16 FebruaryEurope/MoscowbWed, 16 Feb 2011 18:01:01 +0300000000pmWed, 16 Feb 2011 18:01:01 +030011 2011, 18:01:01

5 ответов


75

Да безопасно удалять файл журнала после выключения 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 делает это в любом случае. Кроме того, завершение работы завершает любые оставшиеся элементы в журнале повтора. Чтобы сохранить эту опцию, просто добавьте ее в /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 также очистили бы журналы, но еще больше движущихся частей все еще существуют, и их выбирают в Crash Recovery при запуске mysqld. Лучше всего установить 0.

ответил RolandoMySQLDBA 16 FebruaryEurope/MoscowbWed, 16 Feb 2011 20:15:37 +0300000000pmWed, 16 Feb 2011 20:15:37 +030011 2011, 20:15:37
24

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

  

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

     
  • Если innodb_fast_shutdown не установлен в 2: остановите сервер MySQL и   убедитесь, что он отключается без ошибок, чтобы   нет информации о незавершенных транзакциях в журнале повтора. Скопируйте   старых журнальных файлов в безопасном месте, если что-то пошло не так   во время выключения, и вы нуждаетесь в них для восстановления табличного пространства.   Удалите старые файлы журналов из каталога файла журнала, измените 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.   
  3. Измените файл my.cnf, чтобы изменить конфигурацию файла журнала. Чтобы изменить журнал   размер файла, настройте innodb_log_file_size. Чтобы увеличить количество   файлы журнала, настройте innodb_log_files_in_group.

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

  6.   

Если InnoDB обнаруживает, что innodb_log_file_size отличается от повтора   размер файла журнала, он будет записывать контрольную точку журнала, закрыть и удалить   старые файлы журналов, создавать новые файлы журналов по требуемому размеру и открывать   новые файлы журналов.

ответил RandomSeed 18 J0000006Europe/Moscow 2013, 14:21:23
18

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

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

  1. set innodb_fast_shutdown = OFF
  2. перезапустить mysql
  3. остановить mysql
  4. удалить лог-файлы
  5. запустите mysql

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

ответил Rick James 26 J000000Tuesday11 2011, 03:15:13
0

При входе в 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 МБ. Чтобы убедиться, установите размер файла журнала 8GB

ответил Linux Newbie 29 FriEurope/Moscow2017-12-29T20:14:13+03:00Europe/Moscow12bEurope/MoscowFri, 29 Dec 2017 20:14:13 +0300 2017, 20:14:13
-4

chown mysql: mysql -R /etc /mysql /var /lib /mysql & & & & & & & & cd /var /lib /mysql & & & & rm -f ib_logfile * & & & служба mysql restart || служба mysql restart

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

ответил Gregory 31 MonEurope/Moscow2012-12-31T07:29:46+04:00Europe/Moscow12bEurope/MoscowMon, 31 Dec 2012 07:29:46 +0400 2012, 07:29:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132