Spec-Zone.ru › MySQL 9.2

15.7.8.3 Оператор FLUSH

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

flush_option: {
    BINARY LOGS
  | ENGINE LOGS
  | ERROR LOGS
  | GENERAL LOGS
  | LOGS
  | PRIVILEGES
  | OPTIMIZER_COSTS
  | 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 требуются привилегии, указанные в её описании.

Примечание

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

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

Примечание

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

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

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

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

Оператор RESET похож на оператор FLUSH. См. Раздел 15.7.8.6, «Оператор RESET», чтобы узнать о применении RESET с репликацией.

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

  • FLUSH BINARY LOGS

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

    Для выполнения этой операции требуется привилегия RELOAD.

  • FLUSH ENGINE LOGS

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

    Для выполнения этой операции требуется привилегия RELOAD.

  • FLUSH ERROR LOGS

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

    Для выполнения этой операции требуется привилегия RELOAD.

  • FLUSH GENERAL LOGS

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

    Для выполнения этой операции требуется привилегия RELOAD.

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

  • FLUSH LOGS

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

    Для выполнения этой операции требуется привилегия RELOAD.

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

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

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

    Для выполнения этой операции требуется привилегия FLUSH_OPTIMIZER_COSTS или RELOAD.

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

  • FLUSH PRIVILEGES

    Примечание

    Эта команда устарела начиная с MySQL 9.2.0 и вызывает предупреждение об устаревании при использовании. Ожидайте, что FLUSH PRIVILEGES будет удалена в будущих версиях MySQL.

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

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

    Не рекомендуется непосредственно изменять таблицы предоставления прав, и эта функциональность считается устаревшей. Вместо этого используйте операторы управления доступом, такие как CREATE USER, GRANT, REVOKE, как описано в Разделе 8.2.8, «Добавление учетных записей, назначение привилегий и удаление учетных записей».

    Для выполнения этой операции требуется привилегия FLUSH_PRIVILEGES (устарела в MySQL 9.2.0) или привилегия RELOAD.

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

    Сбрасывает отслеживание неудачных попыток входа (или включает его, если сервер был запущен с --skip-grant-tables) и разблокирует любые временно заблокированные учетные записи. См. Раздел 8.2.15, «Управление паролями».

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

    Очищает кэш в оперативной памяти, используемый плагином аутентификации caching_sha2_password. См. Операцию кэширования для плагина аутентификации SHA-2.

  • FLUSH RELAY LOGS [FOR CHANNEL channel]

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

    Для выполнения этой операции требуется привилегия RELOAD.

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

  • FLUSH SLOW LOGS

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

    Для выполнения этой операции требуется привилегия RELOAD.

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

  • FLUSH STATUS

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

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

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

    Для выполнения этой операции требуется привилегия FLUSH_STATUS или RELOAD.

  • FLUSH USER_RESOURCES

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

    Для выполнения этой операции требуется привилегия FLUSH_USER_RESOURCES или RELOAD.

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

Синтаксис FLUSH TABLES

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

Примечание

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

  • FLUSH TABLES

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

    Для выполнения этой операции требуется привилегия FLUSH_TABLES или RELOAD.

    Сведения о кэшировании подготовленных операторов см. в разделе 10.10.3 «Кэширование подготовленных операторов и хранимых процедур».

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

  • FLUSH TABLES tbl_name [, tbl_name] ...

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

    Для выполнения этой операции требуется привилегия FLUSH_TABLES или RELOAD.

  • FLUSH TABLES WITH READ LOCK

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

    Для выполнения этой операции требуется привилегия FLUSH_TABLES или RELOAD.

    Эта операция является очень удобным способом создания резервных копий, если у вас есть файловая система, например 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.

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

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

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

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

    Операция сначала приобретает эксклюзивные метаданные блокировки для таблиц, поэтому ожидает завершения транзакций, которые имеют эти таблицы открытыми. Затем операция сбрасывает таблицы из кэша таблиц, повторно открывает таблицы, приобретает блокировки таблиц (как 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 или RELOAD привилегия. Поскольку она приобретает блокировки на таблицах в подготовке к их экспорту, она также требует LOCK TABLES и SELECT привилегий для каждой таблицы.

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

    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 см. Раздел 17.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-9.2-en/flush.html

Spec-Zone.ru

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