Команды MySQL FLUSH

В мире хостинга MySQL остается одним из самых важных компонентов для обеспечения работы динамических веб-сайтов, магазинов электронной коммерции, систем управления контентом (CMS) и SaaS-платформ. Независимо от того, управляете ли вы кластером виртуального хостинга, VPS-инфраструктурой или выделенными серверами для корпоративных клиентов, контроль над внутренними операциями MySQL крайне важен.

Одним из часто игнорируемых, но мощных инструментов является команда FLUSH – набор административных SQL-запросов, позволяющих перезагружать привилегии, очищать журналы, сбрасывать состояния и обеспечивать согласованность без перезапуска сервера.

Что такое FLUSH в MySQL?

Оператор FLUSH используется для:

  • Очистить внутренние кэши

  • Перезагрузки конфигурационных файлов (например, таблиц привилегий)

  • Сбросить информацию о состоянии

  • Заставить MySQL записать буферизованные данные на диск

Только пользователи с привилегией RELOAD (или более высокой, например SUPER) могут выполнять большинство операций FLUSH.

Общие команды FLUSH

1. 🔐 FLUSH PRIVILEGES

Перезагружает привилегии пользователей из таблиц грантов в базе данных mysql:

FLUSH PRIVILEGES;

Когда использовать:

  • После ручного редактирования mysql.user или других таблиц грантов.

  • При изменении доступа пользователей с помощью прямых операторов UPDATE вместо GRANT.

2. ОЧИСТИТЬ ТАБЛИЦЫ

Закрывает все открытые таблицы и заставляет открыть их заново. Полезно при обслуживании файловой системы или резервном копировании.

FLUSH TABLES;

Вы также можете очистить определенные таблицы:

FLUSH TABLES имя_таблицы [, имя_таблицы] ...;

Когда использовать:

  • Перед выполнением резервного копирования с помощью внешних инструментов (например, mysqldump –single-transaction).

  • После масштабных записей, которые могут перегрузить кэш таблиц.

3. ПРОМЫТЬ КЭШ ЗАПРОСОВ

Удаляет все результаты запросов из кэша запросов (если он включен):

FLUSH QUERY CACHE;

Примечание: Кэш запросов устарел и удален в MySQL 8.0.

4. FLUSH LOGS

Закрывает и снова открывает все файлы журналов (общий журнал, журнал ошибок, двоичный журнал, журнал реле).

FLUSH LOGS;

Или промыть журнал определенного типа:

FLUSH BINARY LOGS;
FLUSH ERROR LOGS;
FLUSH ENGINE LOGS;
FLUSH SLOW LOGS;

Когда использовать:

  • После ротации журналов

  • Когда журналы перемещаются или архивируются

  • Чтобы сбросить журналы для отладки или соответствия требованиям

5. СБРОС ХОСТОВ

Сбрасывает кэш неудачных клиентских подключений на хосте.

FLUSH HOSTS;

Когда использовать:

  • При получении ошибки:
    Host 'xxx' is blocked because of many connection errors

6. СБРОС СТАТУСА

Обнуляет большинство переменных состояния (не влияет на глобальные счетчики, такие как Uptime).

FLUSH STATUS;

Когда использовать:

  • Перед бенчмаркингом или тестированием производительности.

  • Чтобы получить чистые метрики с помощью SHOW STATUS.

7. ПРОМЫТЬ ТАБЛИЦЫ С БЛОКИРОВКОЙ ЧТЕНИЯ

Промывает и блокирует все таблицы, предотвращая запись из других сессий.

FLUSH TABLES WITH READ LOCK;

Когда использовать:

  • Для последовательного резервного копирования моментальных снимков (например, с помощью LVM или средств копирования файлов).

  • Важно: Всегда снимайте блокировку вручную с помощью UNLOCK TABLES;

8. FLUSH DES_KEY_FILE

Перезагружает файлы ключей DES, используемые в старых DES_ENCRYPT()/DES_DECRYPT() (legacy).

FLUSH DES_KEY_FILE;

9. FLUSH USER_RESOURCES

Сбрасывает счетчики ограничений ресурсов для каждого пользователя (например, MAX_QUERIES_PER_HOUR).

FLUSH USER_RESOURCES;

Когда использовать:

  • Сброс в середине цикла для пользователей с ограниченными ресурсами.

Утраченные/удаленные команды

  • FLUSH QUERY CACHE удалена в MySQL 8.0.

  • FLUSH DES_KEY_FILE является устаревшей.

  • Рассмотрите более новые альтернативы в MySQL 8.0, такие как RESET PERSIST.

Необходимые разрешения

Большинство операций FLUSH требуют:

  • ПривилегияRELOAD

  • SUPER или SYSTEM_VARIABLES_ADMIN (для чувствительных операций в MySQL 8)

Пример:

GRANT RELOAD ON *.* TO 'admin'@'localhost';

Заключение

Семейство команд FLUSH необходимо для административного контроля в MySQL. Независимо от того, управляете ли вы привилегиями, журналами или состоянием кэша, понимание того, как и когда использовать FLUSH, помогает поддерживать оптимальную производительность и надежность сервера, не требуя его перезапуска. Используйте ее с умом и соответствующими привилегиями, особенно в производственных средах.