Я хотел бы знать, будет ли "перезапуск службы 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.