Spec-Zone.ru › MySQL 5.7

13.7.6.3 Операция FLUSH

FLUSH [NO_WRITE_TO_BINLOG | LOCAL] {
    flush_option [, flush_option] ...
  | tables_option
}

flush_option: {
    BINARY LOGS
  | DES_KEY_FILE
  | ENGINE LOGS
  | ERROR LOGS
  | GENERAL LOGS
  | HOSTS
  | LOGS
  | PRIVILEGES
  | OPTIMIZER_COSTS
  | QUERY CACHE
  | RELAY LOGS [FOR CHANNEL channel]
  | SLOW LOGS
  | STATUS
  | USER_RESOURCES
}

tables_option: {
    table_synonym
  | table_synonym tbl_name [, tbl_name] ...
  | table_synonym WITH READ LOCK
  | table_synonym tbl_name [, tbl_name] ... WITH READ LOCK
  | table_synonym tbl_name [, tbl_name] ... FOR EXPORT
}

table_synonym: {
    TABLE
  | TABLES
}

Операция FLUSH имеет несколько вариантов, которые позволяют очистить или перезагрузить различные внутренние кэши, очистить таблицы или получить блокировки. Для выполнения FLUSH требуется привилегия RELOAD. Некоторые опции flush могут потребовать дополнительных привилегий, как указано в описаниях опций.

Примечание

Невозможно выполнить FLUSH внутри хранимых функций или триггеров. Однако FLUSH можно использовать в хранимых процедурах, если они не вызываются из хранимых функций или триггеров. См. Раздел 23.8, «Ограничения на хранимые программы».

По умолчанию сервер записывает FLUSH в бинарный журнал, чтобы они реплицировались на репликах. Для подавления логирования используйте необязательное ключевое слово NO_WRITE_TO_BINLOG или его псевдоним LOCAL.

Примечание

FLUSH LOGS, FLUSH BINARY LOGS, FLUSH TABLES WITH READ LOCK (с или без списка таблиц) и FLUSH TABLES tbl_name ... FOR EXPORT в любом случае не записываются в бинарный журнал, поскольку они могут вызвать проблемы при репликации на реплику.

Операция FLUSH вызывает неявную фиксацию. См. Раздел 13.3.3, «Операции, вызывающие неявную фиксацию».

Утилита mysqladmin предоставляет командную строку для некоторых операций flush, используя команды, такие как flush-hosts, flush-logs, flush-privileges, flush-status и flush-tables. См. Раздел 4.5.2, «mysqladmin — Программа администрирования MySQL-сервера».

Отправка сигнала SIGHUP серверу вызывает несколько операций flush, аналогичных различным формам оператора FLUSH. Сигналы могут отправляться учетной записью системы root или учетной записью системы, которая владеет процессом сервера. Это позволяет выполнять операции flush без подключения к серверу, что требует учетной записи MySQL с привилегиями, достаточными для этих операций. См. Раздел 4.10, «Обработка сигналов Unix в MySQL».

Операция RESET аналогична FLUSH. См. Раздел 13.7.6.6, «Операция RESET» для получения информации об использовании RESET с репликацией.

В следующем списке описаны разрешенные значения FLUSH flush_option. Для описания разрешенных значений tables_option см. Синтаксис FLUSH TABLES.

  • FLUSH BINARY LOGS

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

    Эта операция не влияет на таблицы, используемые для двоичных и релейных журналов (управляемые системными переменными master_info_repository и relay_log_info_repository).

  • FLUSH DES_KEY_FILE

    Перезагружает ключи DES из файла, указанного параметром --des-key-file при запуске сервера.

    Примечание

    Функции DES_ENCRYPT() и DES_DECRYPT() устарели в MySQL 5.7, удалены в MySQL 8.0 и больше не должны использоваться. Вследствие этого --des-key-file и DES_KEY_FILE также устарели и удалены в MySQL 8.0.

  • FLUSH ENGINE LOGS

    Закрывает и снова открывает любые протоколируемые журналы установленных движков хранения. Это приводит к тому, что InnoDB записывает свои журналы на диск.

  • FLUSH ERROR LOGS

    Закрывает и снова открывает любой файл журнала ошибок, в который записывает сервер.

  • FLUSH GENERAL LOGS

    Закрывает и снова открывает любой файл журнала общих запросов, в который записывает сервер.

    Эта операция не влияет на таблицы, используемые для журнала общих запросов (см. Раздел 5.4.1, «Выбор направлений вывода журнала общих запросов и журнала медленных запросов»).

  • FLUSH HOSTS

    Очищает кеш хостов и таблицу Performance Schema host_cache, которая отображает содержимое кеша, и разблокирует заблокированные хосты.

    Дополнительную информацию о том, почему может быть желательно выполнить сброс кеша хостов, см. в Разделе 5.1.11.2, «DNS-запросы и кэш хостов».

    Примечание

    Оператор TRUNCATE TABLE performance_schema.host_cache, в отличие от FLUSH HOSTS, не записывается в двоичный журнал. Чтобы получить такой же результат из последнего, укажите NO_WRITE_TO_BINLOG или LOCAL в рамках оператора FLUSH HOSTS.

  • FLUSH LOGS

    Закрывает и снова открывает любой файл журнала, в который записывает сервер.

    Эффект этой операции эквивалентен совокупному эффекту этих операций:

    FLUSH BINARY LOGS
    FLUSH ENGINE LOGS
    FLUSH ERROR LOGS
    FLUSH GENERAL LOGS
    FLUSH RELAY LOGS
    FLUSH SLOW LOGS
    
  • FLUSH OPTIMIZER_COSTS

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

    Сервер записывает предупреждение в журнал ошибок для любых нераспознанных записей таблицы модели затрат. Дополнительную информацию об этих таблицах см. в Разделе 8.9.5, «Модель затрат оптимизатора». Эта операция влияет только на сеансы, начатые после сброса. Существующие сеансы продолжают использовать оценки затрат, которые действовали при их запуске.

  • FLUSH PRIVILEGES

    Перечитывает разрешения из таблиц разрешений в системе баз данных mysql.

    Перезагрузка таблиц разрешений необходима для актуализации привилегий MySQL и пользователей только в том случае, если вы изменяете их непосредственно в таблицах разрешений; это не требуется для операторов управления учетными записями, таких как GRANT или REVOKE, которые вступают в силу немедленно. Более подробную информацию см. в Разделе 6.2.9, «Когда вступают в силу изменения привилегий».

    Если параметр --skip-grant-tables был указан при запуске сервера для отключения системы привилегий MySQL, FLUSH PRIVILEGES позволяет включить систему привилегий во время работы.

    Освобождает память, кэшированную сервером в результате операторов GRANT, CREATE USER, CREATE SERVER и INSTALL PLUGIN. Эта память не освобождается соответствующими операторами REVOKE, DROP USER, DROP SERVER и UNINSTALL PLUGIN, поэтому для сервера, выполняющего многочисленные операции, вызывающие кэширование, использование кэшированной памяти увеличивается, если не освободить её с помощью FLUSH PRIVILEGES.

  • FLUSH QUERY CACHE

    Оптимизирует кеш запросов для лучшего использования памяти. FLUSH QUERY CACHE не удаляет запросы из кеша, в отличие от FLUSH TABLES или RESET QUERY CACHE.

    Примечание

    Кеш запросов устарел начиная с MySQL 5.7.20 и удален в MySQL 8.0. Устаревание включает FLUSH QUERY CACHE.

  • FLUSH RELAY LOGS [FOR CHANNEL channel]

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

    Клауза FOR CHANNEL channel позволяет указать, к какому каналу репликации применяется операция. Выполните FLUSH RELAY LOGS FOR CHANNEL channel, чтобы очистить релейный журнал для конкретного канала репликации. Если канал не указан и дополнительных каналов репликации нет, операция применяется к стандартному каналу. Если канал не указан и существует несколько каналов репликации, операция применяется ко всем каналам репликации, за исключением канала group_replication_applier. Более подробную информацию см. в Разделе 16.2.2, «Каналы репликации».

    Эта операция не влияет на таблицы, используемые для двоичных и релейных журналов (управляемые системными переменными master_info_repository и relay_log_info_repository).

  • FLUSH SLOW LOGS

    Закрывает и снова открывает любой файл журнала медленных запросов, в который записывает сервер.

    Эта операция не влияет на таблицы, используемые для журнала медленных запросов (см. Раздел 5.4.1, «Выбор направлений вывода журнала общих запросов и журнала медленных запросов»).

  • FLUSH STATUS

    Очищает индикаторы статуса.

    Эта операция добавляет значения переменных состояния сеанса текущей нити к глобальным значениям и сбрасывает сеансовые значения в ноль. Некоторые глобальные переменные также могут быть сброшены в ноль. Кроме того, она сбрасывает счетчики для кешей ключей (стандартного и именованного) в ноль и устанавливает Max_used_connections в текущее количество открытых соединений. Эта информация может быть полезна при отладке запроса. См. Раздел 1.5, «Как сообщить об ошибках или проблемах».

    FLUSH STATUS не зависит от read_only или super_read_only и всегда записывается в двоичный журнал.

    Примечание

    Значение системной переменной show_compatibility_56 влияет на работу этого варианта FLUSH. Подробности см. в описании этой переменной в Разделе 5.1.7, «Системные переменные сервера».

  • FLUSH USER_RESOURCES

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

    Сброс показателей ресурсов позволяет клиентам, достигшим своих часовых лимитов соединений, запросов или обновлений, возобновить работу сразу. FLUSH USER_RESOURCES не применяется к ограничению на максимальное одновременное количество соединений, управляемому системной переменной max_user_connections. См. Раздел 6.2.16, «Настройка лимитов ресурсов учетной записи».

Синтаксис FLUSH TABLES

FLUSH TABLES очищает таблицы и, в зависимости от используемого варианта, получает блокировки. Любой TABLES вариант, используемый в операторе FLUSH, должен быть единственным используемым вариантом. FLUSH TABLE является синонимом FLUSH TABLES.

Примечание

Описания здесь, указывающие на очистку таблиц при их закрытии, применяются по-разному для InnoDB, который очищает содержимое таблиц на диске, но оставляет их открытыми. Это по-прежнему позволяет копировать файлы таблиц, пока таблицы открыты, если другие действия их не изменяют.

  • FLUSH TABLES

    Закрывает все открытые таблицы, принудительно закрывает все используемые таблицы и очищает кэш запросов и кэш подготовленных операторов. FLUSH TABLES также удаляет все результаты запросов из кэша запросов, как и оператор RESET QUERY CACHE. Сведения о кэшировании запросов и кэшировании подготовленных операторов см. в разделе 8.10.3 «Кэш запросов MySQL» и разделе 8.10.4 «Кэширование подготовленных операторов и хранимых программ».

    FLUSH TABLES запрещен при активном LOCK TABLES ... READ. Для очистки и блокировки таблиц используйте FLUSH TABLES tbl_name ... WITH READ LOCK вместо этого.

  • FLUSH TABLES tbl_name [, tbl_name] ...

    С указанием списка одной или нескольких таблиц, разделенных запятыми, данная операция похожа на FLUSH TABLES без имен, за исключением того, что сервер очищает только указанные таблицы. Если указанной таблицы не существует, ошибка не возникает.

  • FLUSH TABLES WITH READ LOCK

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

    Данная операция очень удобна для создания резервных копий, если у вас есть файловая система, такая как Veritas или ZFS, которая может создавать моментальные снимки во времени. Используйте UNLOCK TABLES для разблокировки.

    FLUSH TABLES WITH READ LOCK получает глобальную блокировку чтения, а не блокировку таблиц, поэтому ее поведение не такое же, как у LOCK TABLES и UNLOCK TABLES в отношении блокировок таблиц и неявных подтверждений:

    • UNLOCK TABLES неявно подтверждает любой активный транзакцию только в том случае, если какие-либо таблицы в данный момент заблокированы с помощью LOCK TABLES. Подтверждение не происходит для UNLOCK TABLES после FLUSH TABLES WITH READ LOCK, так как последний оператор не получает блокировки таблиц.

    • Начало транзакции приводит к освобождению блокировок таблиц, полученных с помощью LOCK TABLES, как если бы вы выполнили UNLOCK TABLES. Начало транзакции не освобождает глобальную блокировку чтения, полученную с помощью FLUSH TABLES WITH READ LOCK.

    До MySQL 5.7.19 FLUSH TABLES WITH READ LOCK не совместим с XA-транзакциями.

    FLUSH TABLES WITH READ LOCK не препятствует вставке строк в таблицы журнала (см. раздел 5.4.1 «Выбор мест назначения для вывода журнала запросов и журнала медленных запросов»).

  • FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK

    Очищает и получает блокировки чтения для указанных таблиц.

    Поскольку эта операция получает блокировки таблиц, она требует привилегии LOCK TABLES для каждой таблицы, помимо привилегии RELOAD.

    Операция сначала получает эксклюзивные метаданные блокировок для таблиц, поэтому ожидает завершения транзакций, которые имеют эти таблицы открытыми. Затем операция очищает таблицы из кэша таблиц, повторно открывает таблицы, получает блокировки таблиц (как LOCK TABLES ... READ) и понижает уровень блокировок метаданных с эксклюзивного на общий. После получения блокировок и понижения уровня блокировок метаданных другие сессии могут читать, но не изменять таблицы.

    Данная операция применяется только к существующим базовым (не TEMPORARY) ) таблицам. Если имя относится к базовой таблице, используется эта таблица. Если имя относится к TEMPORARY таблице, она игнорируется. Если имя относится к представлению, возникает ошибка. В противном случае возникает ошибка.

    Используйте UNLOCK TABLES для разблокировки, LOCK TABLES для разблокировки и получения других блокировок или START TRANSACTION для разблокировки и начала новой транзакции.

    Этот вариант FLUSH TABLES позволяет очищать и блокировать таблицы в одной операции. Это обходной путь к ограничению, что FLUSH TABLES не разрешен при активном LOCK TABLES ... READ.

    Данная операция не выполняет неявное UNLOCK TABLES, поэтому возникает ошибка, если вы выполняете операцию, когда существует активный LOCK TABLES или используете ее во второй раз без предварительного освобождения полученных блокировок.

    Если очищенная таблица была открыта с помощью HANDLER, обработчик неявно очищается и теряет свою позицию.

  • FLUSH TABLES tbl_name [, tbl_name] ... FOR EXPORT

    Этот FLUSH TABLES вариант применяется к InnoDB таблицам. Он гарантирует, что изменения в указанных таблицах были записаны на диск, чтобы можно было создать двоичные копии таблиц во время работы сервера.

    Поскольку операция FLUSH TABLES ... FOR EXPORT приобретает блокировки на таблицах в ожидании их экспорта, она требует привилегий LOCK TABLES и SELECT для каждой таблицы, помимо привилегии RELOAD.

    Операция работает следующим образом:

    1. Она приобретает общие блокировки метаданных для указанных таблиц. Операция блокируется, пока другие сеансы имеют активные транзакции, которые изменили эти таблицы или удерживают блокировки на них. После приобретения блокировок операция блокирует транзакции, пытающиеся обновить таблицы, но позволяет продолжать чтение данных.

    2. Она проверяет, поддерживают ли все движки хранения для таблиц FOR EXPORT. Если нет, возникает ошибка, и операция завершается неудачей.

    3. Операция уведомляет движок хранения для каждой таблицы, чтобы таблица была подготовлена к экспорту. Движок хранения должен гарантировать, что все ожидаемые изменения будут записаны на диск.

    4. Операция устанавливает режим блокировки сеанса, чтобы блокировки метаданных, приобретенные ранее, не были освобождены при завершении операции FOR EXPORT.

    Эта операция применяется только к существующим базовым (не-TEMPORARY) таблицам. Если имя относится к базовой таблице, используется эта таблица. Если оно относится к TEMPORARY таблице, оно игнорируется. Если имя относится к представлению, возникает ошибка. В противном случае возникает ошибка.

    InnoDB поддерживает FOR EXPORT для таблиц, имеющих собственный файл (то есть, таблиц, созданных с включенным параметром innodb_file_per_table). InnoDB гарантирует, что при уведомлении операцией FOR EXPORT любые изменения были записаны на диск. Это позволяет создать двоичную копию содержимого таблицы во время выполнения операции FOR EXPORT, потому что файл .ibd транзакционно-согласован и может быть скопирован во время работы сервера. FOR EXPORT не применяется к файлам InnoDB системного табличного пространства или к InnoDB таблицам с FULLTEXT индексами.

    FLUSH TABLES ...FOR EXPORT поддерживается для разграниченных InnoDB таблиц.

    При уведомлении операцией FOR EXPORT, InnoDB записывает на диск определенные типы данных, которые обычно хранятся в памяти или в отдельных буферах на диске за пределами файлов табличного пространства. Для каждой таблицы InnoDB также создает файл под названием table_name.cfg в той же директории базы данных, что и таблица. Файл .cfg содержит метаданные, необходимые для повторного импорта файлов табличного пространства позже, в тот же или другой сервер.

    После завершения операции FOR EXPORT, InnoDB записала все данные таблицы в файлы данных таблицы. Любые записи сливаются перед записью. На этом этапе таблицы заблокированы и неактивны: таблицы находятся в транзакционно-согласованном состоянии на диске, и вы можете скопировать файлы .ibd табличного пространства вместе с соответствующими файлами .cfg, чтобы получить согласованную моментальную копию этих таблиц.

    Для процедуры повторного импорта скопированных данных таблицы в экземпляр MySQL см. Раздел 14.6.1.3, «Импорт таблиц InnoDB».

    После завершения работы с таблицами используйте UNLOCK TABLES для освобождения блокировок, LOCK TABLES для освобождения блокировок и приобретения других блокировок или START TRANSACTION для освобождения блокировок и начала новой транзакции.

    Пока любой из этих операторов активен в сеансе, попытки использовать FLUSH TABLES ... FOR EXPORT приведут к ошибке:

    FLUSH TABLES ... WITH READ LOCK
    FLUSH TABLES ... FOR EXPORT
    LOCK TABLES ... READ
    LOCK TABLES ... WRITE
    

    Пока FLUSH TABLES ... FOR EXPORT активен в сеансе, попытки использования любого из этих операторов приведут к ошибке:

    FLUSH TABLES WITH READ LOCK
    FLUSH TABLES ... WITH READ LOCK
    FLUSH TABLES ... FOR EXPORT
    

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/flush.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API