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.
-
Закрывает и снова открывает любой двоичный журнал, в который записывает сервер. Если включено двоичное протоколирование, номер последовательности двоичного журнала увеличивается на единицу относительно предыдущего файла.
Эта операция не влияет на таблицы, используемые для двоичных и релейных журналов (управляемые системными переменными
master_info_repositoryиrelay_log_info_repository). -
Перезагружает ключи DES из файла, указанного параметром
--des-key-fileпри запуске сервера.ПримечаниеФункции
DES_ENCRYPT()иDES_DECRYPT()устарели в MySQL 5.7, удалены в MySQL 8.0 и больше не должны использоваться. Вследствие этого--des-key-fileиDES_KEY_FILEтакже устарели и удалены в MySQL 8.0. -
Закрывает и снова открывает любые протоколируемые журналы установленных движков хранения. Это приводит к тому, что
InnoDBзаписывает свои журналы на диск. -
Закрывает и снова открывает любой файл журнала ошибок, в который записывает сервер.
-
Закрывает и снова открывает любой файл журнала общих запросов, в который записывает сервер.
Эта операция не влияет на таблицы, используемые для журнала общих запросов (см. Раздел 5.4.1, «Выбор направлений вывода журнала общих запросов и журнала медленных запросов»).
-
Очищает кеш хостов и таблицу 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 BINARY LOGS FLUSH ENGINE LOGS FLUSH ERROR LOGS FLUSH GENERAL LOGS FLUSH RELAY LOGS FLUSH SLOW LOGS
-
Перечитывает таблицы модели затрат, чтобы оптимизатор начал использовать текущие оценки затрат, хранящиеся в них.
Сервер записывает предупреждение в журнал ошибок для любых нераспознанных записей таблицы модели затрат. Дополнительную информацию об этих таблицах см. в Разделе 8.9.5, «Модель затрат оптимизатора». Эта операция влияет только на сеансы, начатые после сброса. Существующие сеансы продолжают использовать оценки затрат, которые действовали при их запуске.
-
Перечитывает разрешения из таблиц разрешений в системе баз данных
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 TABLESилиRESET QUERY CACHE.ПримечаниеКеш запросов устарел начиная с MySQL 5.7.20 и удален в MySQL 8.0. Устаревание включает
FLUSH QUERY CACHE. -
FLUSH RELAY LOGS [FOR CHANNELchannel]Закрывает и снова открывает любой файл релейного журнала, в который записывает сервер. Если включено релейное протоколирование, номер последовательности файла релейного журнала увеличивается на единицу относительно предыдущего файла.
Клауза
FOR CHANNELпозволяет указать, к какому каналу репликации применяется операция. ВыполнитеchannelFLUSH RELAY LOGS FOR CHANNEL, чтобы очистить релейный журнал для конкретного канала репликации. Если канал не указан и дополнительных каналов репликации нет, операция применяется к стандартному каналу. Если канал не указан и существует несколько каналов репликации, операция применяется ко всем каналам репликации, за исключением каналаchannelgroup_replication_applier. Более подробную информацию см. в Разделе 16.2.2, «Каналы репликации».Эта операция не влияет на таблицы, используемые для двоичных и релейных журналов (управляемые системными переменными
master_info_repositoryиrelay_log_info_repository). -
Закрывает и снова открывает любой файл журнала медленных запросов, в который записывает сервер.
Эта операция не влияет на таблицы, используемые для журнала медленных запросов (см. Раздел 5.4.1, «Выбор направлений вывода журнала общих запросов и журнала медленных запросов»).
-
Очищает индикаторы статуса.
Эта операция добавляет значения переменных состояния сеанса текущей нити к глобальным значениям и сбрасывает сеансовые значения в ноль. Некоторые глобальные переменные также могут быть сброшены в ноль. Кроме того, она сбрасывает счетчики для кешей ключей (стандартного и именованного) в ноль и устанавливает
Max_used_connectionsв текущее количество открытых соединений. Эта информация может быть полезна при отладке запроса. См. Раздел 1.5, «Как сообщить об ошибках или проблемах».FLUSH STATUSне зависит отread_onlyилиsuper_read_onlyи всегда записывается в двоичный журнал.ПримечаниеЗначение системной переменной
show_compatibility_56влияет на работу этого вариантаFLUSH. Подробности см. в описании этой переменной в Разделе 5.1.7, «Системные переменные сервера». -
Сбрасывает все показатели ресурсов пользователей в час до нуля.
Сброс показателей ресурсов позволяет клиентам, достигшим своих часовых лимитов соединений, запросов или обновлений, возобновить работу сразу.
FLUSH USER_RESOURCESне применяется к ограничению на максимальное одновременное количество соединений, управляемому системной переменнойmax_user_connections. См. Раздел 6.2.16, «Настройка лимитов ресурсов учетной записи».
Синтаксис FLUSH TABLES
FLUSH TABLES очищает таблицы и, в зависимости от используемого варианта, получает блокировки. Любой TABLES вариант, используемый в операторе FLUSH, должен быть единственным используемым вариантом. FLUSH
TABLE является синонимом FLUSH
TABLES.
Описания здесь, указывающие на очистку таблиц при их закрытии, применяются по-разному для InnoDB, который очищает содержимое таблиц на диске, но оставляет их открытыми. Это по-прежнему позволяет копировать файлы таблиц, пока таблицы открыты, если другие действия их не изменяют.
-
Закрывает все открытые таблицы, принудительно закрывает все используемые таблицы и очищает кэш запросов и кэш подготовленных операторов.
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 TABLEStbl_name[,tbl_name] ...С указанием списка одной или нескольких таблиц, разделенных запятыми, данная операция похожа на
FLUSH TABLESбез имен, за исключением того, что сервер очищает только указанные таблицы. Если указанной таблицы не существует, ошибка не возникает. -
Закрывает все открытые таблицы и блокирует все таблицы всех баз данных с помощью глобальной блокировки чтения.
Данная операция очень удобна для создания резервных копий, если у вас есть файловая система, такая как 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 TABLEStbl_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 TABLEStbl_name[,tbl_name] ... FOR EXPORTЭтот
FLUSH TABLESвариант применяется кInnoDBтаблицам. Он гарантирует, что изменения в указанных таблицах были записаны на диск, чтобы можно было создать двоичные копии таблиц во время работы сервера.Поскольку операция
FLUSH TABLES ... FOR EXPORTприобретает блокировки на таблицах в ожидании их экспорта, она требует привилегийLOCK TABLESиSELECTдля каждой таблицы, помимо привилегииRELOAD.Операция работает следующим образом:
Она приобретает общие блокировки метаданных для указанных таблиц. Операция блокируется, пока другие сеансы имеют активные транзакции, которые изменили эти таблицы или удерживают блокировки на них. После приобретения блокировок операция блокирует транзакции, пытающиеся обновить таблицы, но позволяет продолжать чтение данных.
Она проверяет, поддерживают ли все движки хранения для таблиц
FOR EXPORT. Если нет, возникает ошибка, и операция завершается неудачей.Операция уведомляет движок хранения для каждой таблицы, чтобы таблица была подготовлена к экспорту. Движок хранения должен гарантировать, что все ожидаемые изменения будут записаны на диск.
Операция устанавливает режим блокировки сеанса, чтобы блокировки метаданных, приобретенные ранее, не были освобождены при завершении операции
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.