Назад | Перейти на главную страницу

Будет ли перезапуск mysqld запускать сброс таблиц?

Я хотел бы знать, будет ли "перезапуск службы mysqld" автоматически выполнять чистую очистку таблиц перед перезапуском службы.

У меня Fedora / CentOS с 5.0.77, в основном с таблицами MyISAM, тысячами из них.

Да, это будет. Фактически, если у вас есть InnoDB, все грязные страницы в пуле буферов InnoDB сбрасываются на диск как часть процесса завершения работы.

Если вы хотите ускорить эту операцию, вы должны установить следующий параметр в /etc/my.cnf

[mysqld]
innodb_max_dirty_pages_pct=0

Настройка innodb_max_dirty_pages_pct к нулю (0) сохраняет пул буферов InnoDB до минимума грязных страниц, но немного увеличивает дисковый ввод-вывод, очищая пул буферов InnoDB немного чаще.

По умолчанию innodb_max_dirty_pages_pct составляет 75 в MySQL 5.5 и 90 до MySQL 5.5.

Это ускорит завершение работы mysql, так как сбросить будет меньше. В версии это будет еще заметнее.

Если вы хотите очистить пул буферов InnoDB без перезапуска службы mysqld, запустите это

SET GLOBAL innodb_max_dirty_pages_pct = 0;

Если задействована репликация, автоматически выполняется STOP SLAVE.

Если у вас есть MyISAM, все таблицы MyISAM также будут сброшены, потому что, если таблица MyISAM не очищается (например, в случае сбоя), то таблицы MyISAM, открытые в момент сбоя, по-прежнему будут иметь ненулевой открытый файл подсчитать в его заголовках. Это помечает таблицу MyISAM как сбойную. Вам нужно будет снова запустить REPAIR TABLE такую ​​таблицу.

То же самое и с InnoDB, если в таблицах не было зафиксированных данных, записанных, но они хранились в ib_logfiles, таким образом, восстановление после сбоя выполняется на этапе запуска mysqld.

Таким образом, «перезапуск службы mysqld» должен наложить FLUSH TABLES для MyISAM и InnoDB.