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.
-
Закрывает и вновь открывает любой бинарный журнал регистрации, в который записывает сервер. Если включена бинарная регистрация, номер последовательности бинарного файла журнала увеличивается на единицу по отношению к предыдущему файлу.
Для выполнения этой операции требуется привилегия
RELOAD. -
Закрывает и вновь открывает любые регистрируемые журналы установленных движков хранилищ. Это приводит к тому, что
InnoDBзаписывает свои журналы на диск.Для выполнения этой операции требуется привилегия
RELOAD. -
Закрывает и вновь открывает любой файл журнала ошибок, в который записывает сервер.
Для выполнения этой операции требуется привилегия
RELOAD. -
Закрывает и вновь открывает любой файл журнала общих запросов, в который записывает сервер.
Для выполнения этой операции требуется привилегия
RELOAD.Эта операция не влияет на таблицы, используемые для журнала общих запросов (см. Раздел 7.4.1, «Выборка мест вывода журналов общих запросов и журналов медленных запросов»).
-
Закрывает и вновь открывает любой файл журнала, в который записывает сервер.
Для выполнения этой операции требуется привилегия
RELOAD.Эффект этой операции эквивалентен совокупному эффекту этих операций:
FLUSH BINARY LOGS FLUSH ENGINE LOGS FLUSH ERROR LOGS FLUSH GENERAL LOGS FLUSH RELAY LOGS FLUSH SLOW LOGS
-
Перечитывает таблицы модели стоимости, чтобы оптимизатор начал использовать текущие оценки стоимости, хранящиеся в них.
Для выполнения этой операции требуется привилегия
FLUSH_OPTIMIZER_COSTSилиRELOAD.Сервер записывает предупреждение в журнал ошибок для всех нераспознанных записей таблиц модели стоимости. Сведения о этих таблицах см. в Разделе 10.9.5, «Модель стоимости оптимизатора». Эта операция влияет только на сеансы, которые начинаются после сброса. Существующие сеансы продолжают использовать оценки стоимости, которые были актуальны при их запуске.
-
Примечание
Эта команда устарела начиная с 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 CHANNELchannel]Закрывает и вновь открывает любой файл журнала ретрансляции, в который записывает сервер. Если включена ретрансляционная регистрация, номер последовательности файла журнала ретрансляции увеличивается на единицу по отношению к предыдущему файлу.
Для выполнения этой операции требуется привилегия
RELOAD.Оператор
FOR CHANNELпозволяет указать канал репликации, к которому относится операция. Чтобы очистить журнал ретрансляции для определенного канала репликации, выполнитеchannelFLUSH RELAY LOGS FOR CHANNEL. Если канал не указан и дополнительных каналов репликации нет, операция применяется к стандартному каналу. Если канал не указан, и существуют дополнительные каналы репликации, операция применяется ко всем каналам репликации. Дополнительную информацию см. в Разделе 19.2.2, «Каналы репликации».channel -
Закрывает и вновь открывает любой файл журнала медленных запросов, в который записывает сервер.
Для выполнения этой операции требуется привилегия
RELOAD.Эта операция не влияет на таблицы, используемые для журнала медленных запросов (см. Раздел 7.4.1, «Выбор мест вывода журналов общих запросов и журналов медленных запросов»).
-
Очищает индикаторы статуса.
Эта операция добавляет текущие значения переменных состояния сеанса потока к глобальным значениям и сбрасывает значения сеанса до нуля. Некоторые глобальные переменные также могут быть сброшены до нуля. Также она сбрасывает счетчики кешей ключей (стандартного и именованных) до нуля и устанавливает
Max_used_connectionsна текущее количество открытых подключений. Эта информация может быть полезна при отладке запроса. См. Раздел 1.6, «Как сообщить об ошибках или проблемах».FLUSH STATUSне затрагивается параметрамиread_onlyилиsuper_read_onlyи всегда записывается в бинарный журнал.Для выполнения этой операции требуется привилегия
FLUSH_STATUSилиRELOAD. -
Сбрасывает все индикаторы ресурсов пользователей за час до нуля.
Для выполнения этой операции требуется привилегия
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илиRELOAD.Сведения о кэшировании подготовленных операторов см. в разделе 10.10.3 «Кэширование подготовленных операторов и хранимых процедур».
FLUSH TABLESзапрещено, когда активенLOCK TABLES ... READ. Для сброса и блокировки таблиц используйтеFLUSH TABLESвместо этого.tbl_name... WITH READ LOCK -
FLUSH TABLEStbl_name[,tbl_name] ...При указании списка из одной или нескольких таблиц, разделенных запятыми, эта операция аналогична
FLUSH TABLESбез имён, за исключением того, что сервер сбрасывает только указанные таблицы. Если названная таблица не существует, ошибки не возникает.Для выполнения этой операции требуется привилегия
FLUSH_TABLESилиRELOAD. -
Закрывает все открытые таблицы и блокирует все таблицы для всех баз данных с глобальной блокировкой для чтения.
Для выполнения этой операции требуется привилегия
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 TABLEStbl_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 TABLEStbl_name[,tbl_name] ... FOR EXPORTЭтот
FLUSH TABLESвариант применяется кInnoDBтаблицам. Он гарантирует, что изменения в указанных таблицах были записаны на диск, чтобы можно было создать двоичные копии таблиц во время работы сервера.Для этой операции требуется
FLUSH_TABLESилиRELOADпривилегия. Поскольку она приобретает блокировки на таблицах в подготовке к их экспорту, она также требуетLOCK TABLESиSELECTпривилегий для каждой таблицы.Операция выполняется следующим образом:
Она приобретает общие блокировки метаданных для указанных таблиц. Операция блокируется, пока другие сеансы имеют активные транзакции, которые изменили эти таблицы или удерживают блокировки таблиц для них. После приобретения блокировок операция блокирует транзакции, пытающиеся обновить таблицы, позволяя продолжать только чтение.
Она проверяет, поддерживают ли все движки хранения для таблиц
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 см. Раздел 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.