Spec-Zone.ru › MySQL 8.4

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.8, «Ограничения на хранимые программы».

По умолчанию сервер записывает операцию 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. Сигналы могут быть отправлены учетной записью системы 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. В рамках этой операции сервер читает таблицу global_grants, содержащую динамические назначения привилегий, и регистрирует любые не зарегистрированные привилегии, найденные в ней.

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

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

    Если параметр --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-8.4-en/flush.html

Spec-Zone.ru

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