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
}
The FLUSH statement has several
variant forms that clear or reload various internal caches,
flush tables, or acquire locks. Each
FLUSH operation requires the
privileges indicated in its description.
It is not possible to issue
FLUSH statements within stored
functions or triggers. However, you may use
FLUSH in stored procedures, so
long as these are not called from stored functions or
triggers. See Section 27.8, “Restrictions on Stored Programs”.
By default, the server writes
FLUSH statements to the binary
log so that they replicate to replicas. To suppress logging,
specify the optional NO_WRITE_TO_BINLOG
keyword or its alias LOCAL.
FLUSH LOGS,
FLUSH BINARY LOGS,
FLUSH TABLES WITH READ LOCK
(with or without a table list), and
FLUSH
TABLES are not written to the binary log in any case
because they would cause problems if replicated to a replica.
tbl_name ... FOR
EXPORT
The FLUSH statement causes an
implicit commit. See Section 15.3.3, “Statements That Cause an Implicit Commit”.
The mysqladmin utility provides a
command-line interface to some flush operations, using commands
such as flush-logs,
flush-privileges,
flush-status, and
flush-tables. See
Section 6.5.2, “mysqladmin — A MySQL Server Administration Program”.
Sending a SIGHUP or
SIGUSR1 signal to the server causes several
flush operations to occur that are similar to various forms of
the FLUSH statement. Signals can
be sent by the root system account or the
system account that owns the server process. This enables the
flush operations to be performed without having to connect to
the server, which requires a MySQL account that has privileges
sufficient for those operations. See
Section 6.10, “Unix Signal Handling in MySQL”.
The RESET statement is similar to
FLUSH. See
Section 15.7.8.6, “RESET Statement”, for information about using
RESET with replication.
The following list describes the permitted
FLUSH statement
flush_option values. For descriptions
of the permitted tables_option
values, see FLUSH TABLES Syntax.
Closes and reopens any binary log file to which the server is writing. If binary logging is enabled, the sequence number of the binary log file is incremented by one relative to the previous file.
This operation requires the
RELOADprivilege.Closes and reopens any flushable logs for installed storage engines. This causes
InnoDBto flush its logs to disk.This operation requires the
RELOADprivilege.Closes and reopens any error log file to which the server is writing.
This operation requires the
RELOADprivilege.Closes and reopens any general query log file to which the server is writing.
This operation requires the
RELOADprivilege.This operation has no effect on tables used for the general query log (see Section 7.4.1, “Selecting General Query Log and Slow Query Log Output Destinations”).
Closes and reopens any log file to which the server is writing.
This operation requires the
RELOADprivilege.The effect of this operation is equivalent to the combined effects of these operations:
FLUSH BINARY LOGS FLUSH ENGINE LOGS FLUSH ERROR LOGS FLUSH GENERAL LOGS FLUSH RELAY LOGS FLUSH SLOW LOGSRe-reads the cost model tables so that the optimizer starts using the current cost estimates stored in them.
This operation requires the
FLUSH_OPTIMIZER_COSTSorRELOADprivilege.The server writes a warning to the error log for any unrecognized cost model table entries. For information about these tables, see Section 10.9.5, “The Optimizer Cost Model”. This operation affects only sessions that begin subsequent to the flush. Existing sessions continue to use the cost estimates that were current when they began.
Re-reads the privileges from the grant tables in the
mysqlsystem schema. As part of this operation, the server reads theglobal_grantstable containing dynamic privilege assignments and registers any unregistered privileges found there.Reloading the grant tables is necessary to enable updates to MySQL privileges and users only if you make such changes directly to the grant tables; it is not needed for account management statements such as
GRANTorREVOKE, which take effect immediately. See Section 8.2.13, “When Privilege Changes Take Effect”, for more information.This operation requires the
RELOADorFLUSH_PRIVILEGESprivilege.If the
--skip-grant-tablesoption was specified at server startup to disable the MySQL privilege system,FLUSH PRIVILEGESprovides a way to enable the privilege system at runtime.Resets failed-login tracking (or enables it if the server was started with
--skip-grant-tables) and unlocks any temporarily locked accounts. See Section 8.2.15, “Password Management”.Frees memory cached by the server as a result of
GRANT,CREATE USER,CREATE SERVER, andINSTALL PLUGINstatements. This memory is not released by the correspondingREVOKE,DROP USER,DROP SERVER, andUNINSTALL PLUGINstatements, so for a server that executes many instances of the statements that cause caching, there is an increase in cached memory use unless it is freed withFLUSH PRIVILEGES.Clears the in-memory cache used by the
caching_sha2_passwordauthentication plugin. See Cache Operation for SHA-2 Pluggable Authentication.FLUSH RELAY LOGS [FOR CHANNELchannel]Closes and reopens any relay log file to which the server is writing. If relay logging is enabled, the sequence number of the relay log file is incremented by one relative to the previous file.
This operation requires the
RELOADprivilege.The
FOR CHANNELclause enables you to name which replication channel the operation applies to. ExecutechannelFLUSH RELAY LOGS FOR CHANNELto flush the relay log for a specific replication channel. If no channel is named and no extra replication channels exist, the operation applies to the default channel. If no channel is named and multiple replication channels exist, the operation applies to all replication channels. For more information, see Section 19.2.2, “Replication Channels”.channelCloses and reopens any slow query log file to which the server is writing.
This operation requires the
RELOADprivilege.This operation has no effect on tables used for the slow query log (see Section 7.4.1, “Selecting General Query Log and Slow Query Log Output Destinations”).
Flushes status indicators.
This operation adds the current thread's session status variable values to the global values and resets the session values to zero. Some global variables may be reset to zero as well. It also resets the counters for key caches (default and named) to zero and sets
Max_used_connectionsto the current number of open connections. This information may be of use when debugging a query. See Section 1.6, “How to Report Bugs or Problems”.FLUSH STATUSis unaffected byread_onlyorsuper_read_only, and is always written to the binary log.This operation requires the
FLUSH_STATUSorRELOADprivilege.Resets all per-hour user resource indicators to zero.
This operation requires the
FLUSH_USER_RESOURCESorRELOADprivilege.Resetting resource indicators enables clients that have reached their hourly connection, query, or update limits to resume activity immediately.
FLUSH USER_RESOURCESdoes not apply to the limit on maximum simultaneous connections that is controlled by themax_user_connectionssystem variable. See Section 8.2.21, “Setting Account Resource Limits”.
FLUSH TABLES Syntax
FLUSH TABLES flushes tables, and,
depending on the variant used, acquires locks. Any
TABLES variant used in a
FLUSH statement must be the only
option used. FLUSH
TABLE is a synonym for FLUSH
TABLES.
The descriptions here that indicate tables are flushed by
closing them apply differently for InnoDB,
which flushes table contents to disk but leaves them open.
This still permits table files to be copied while the tables
are open, as long as other activity does not modify them.
Closes all open tables, forces all tables in use to be closed, and flushes the prepared statement cache.
This operation requires the
FLUSH_TABLESorRELOADprivilege.For information about prepared statement caching, see Section 10.10.3, “Caching of Prepared Statements and Stored Programs”.
FLUSH TABLESis not permitted when there is an activeLOCK TABLES ... READ. To flush and lock tables, useFLUSH TABLESinstead.tbl_name... WITH READ LOCKFLUSH TABLEStbl_name[,tbl_name] ...With a list of one or more comma-separated table names, this operation is like
FLUSH TABLESwith no names except that the server flushes only the named tables. If a named table does not exist, no error occurs.This operation requires the
FLUSH_TABLESorRELOADprivilege.Closes all open tables and locks all tables for all databases with a global read lock.
This operation requires the
FLUSH_TABLESorRELOADprivilege.This operation is a very convenient way to get backups if you have a file system such as Veritas or ZFS that can take snapshots in time. Use
UNLOCK TABLESto release the lock.FLUSH TABLES WITH READ LOCKacquires a global read lock rather than table locks, so it is not subject to the same behavior asLOCK TABLESandUNLOCK TABLESwith respect to table locking and implicit commits:UNLOCK TABLESimplicitly commits any active transaction only if any tables currently have been locked withLOCK TABLES. The commit does not occur forUNLOCK TABLESfollowingFLUSH TABLES WITH READ LOCKbecause the latter statement does not acquire table locks.Beginning a transaction causes table locks acquired with
LOCK TABLESto be released, as though you had executedUNLOCK TABLES. Beginning a transaction does not release a global read lock acquired withFLUSH TABLES WITH READ LOCK.
FLUSH TABLES WITH READ LOCKdoes not prevent the server from inserting rows into the log tables (see Section 7.4.1, “Selecting General Query Log and Slow Query Log Output Destinations”).FLUSH TABLEStbl_name[,tbl_name] ... WITH READ LOCKFlushes and acquires read locks for the named tables.
This operation requires the
FLUSH_TABLESorRELOADprivilege. Because it acquires table locks, it also requires theLOCK TABLESprivilege for each table.The operation first acquires exclusive metadata locks for the tables, so it waits for transactions that have those tables open to complete. Then the operation flushes the tables from the table cache, reopens the tables, acquires table locks (like
LOCK TABLES ... READ), and downgrades the metadata locks from exclusive to shared. After the operation acquires locks and downgrades the metadata locks, other sessions can read but not modify the tables.This operation applies only to existing base (non-
TEMPORARY)tables. If a name refers to a base table, that table is used. If it refers to aTEMPORARYtable, it is ignored. If a name applies to a view, anER_WRONG_OBJECTerror occurs. Otherwise, anER_NO_SUCH_TABLEerror occurs.Use
UNLOCK TABLESto release the locks,LOCK TABLESto release the locks and acquire other locks, orSTART TRANSACTIONto release the locks and begin a new transaction.This
FLUSH TABLESvariant enables tables to be flushed and locked in a single operation. It provides a workaround for the restriction thatFLUSH TABLESis not permitted when there is an activeLOCK TABLES ... READ.This operation does not perform an implicit
UNLOCK TABLES, so an error results if you perform the operation while there is any activeLOCK TABLESor use it a second time without first releasing the locks acquired.If a flushed table was opened with
HANDLER, the handler is implicitly flushed and loses its position.FLUSH TABLEStbl_name[,tbl_name] ... FOR EXPORTThis
FLUSH TABLESvariant applies toInnoDBtables. It ensures that changes to the named tables have been flushed to disk so that binary table copies can be made while the server is running.This operation requires the
FLUSH_TABLESorRELOADprivilege. Because it acquires locks on tables in preparation for exporting them, it also requires theLOCK TABLESandSELECTprivileges for each table.The operation works like this:
It acquires shared metadata locks for the named tables. The operation blocks as long as other sessions have active transactions that have modified those tables or hold table locks for them. When the locks have been acquired, the operation blocks transactions that attempt to update the tables, while permitting read-only operations to continue.
It checks whether all storage engines for the tables support
FOR EXPORT. If any do not, anER_ILLEGAL_HAerror occurs and the operation fails.The operation notifies the storage engine for each table to make the table ready for export. The storage engine must ensure that any pending changes are written to disk.
The operation puts the session in lock-tables mode so that the metadata locks acquired earlier are not released when the
FOR EXPORToperation completes.
This operation applies only to existing base (non-
TEMPORARY) tables. If a name refers to a base table, that table is used. If it refers to aTEMPORARYtable, it is ignored. If a name applies to a view, anER_WRONG_OBJECTerror occurs. Otherwise, anER_NO_SUCH_TABLEerror occurs.InnoDBsupportsFOR EXPORTfor tables that have their own.ibdfile file (that is, tables created with theinnodb_file_per_tablesetting enabled).InnoDBensures when notified by theFOR EXPORToperation that any changes have been flushed to disk. This permits a binary copy of table contents to be made while theFOR EXPORToperation is in effect because the.ibdfile is transaction consistent and can be copied while the server is running.FOR EXPORTdoes not apply toInnoDBsystem tablespace files, or toInnoDBtables that haveFULLTEXTindexes.FLUSH TABLES ...FOR EXPORTis supported for partitionedInnoDBtables.When notified by
FOR EXPORT,InnoDBwrites to disk certain kinds of data that is normally held in memory or in separate disk buffers outside the tablespace files. For each table,InnoDBalso produces a file namedin the same database directory as the table. Thetable_name.cfg.cfgfile contains metadata needed to reimport the tablespace files later, into the same or different server.When the
FOR EXPORToperation completes,InnoDBhas flushed all dirty pages to the table data files. Any change buffer entries are merged prior to flushing. At this point, the tables are locked and quiescent: The tables are in a transactionally consistent state on disk and you can copy the.ibdtablespace files along with the corresponding.cfgfiles to get a consistent snapshot of those tables.For the procedure to reimport the copied table data into a MySQL instance, see Section 17.6.1.3, “Importing InnoDB Tables”.
After you are done with the tables, use
UNLOCK TABLESto release the locks,LOCK TABLESto release the locks and acquire other locks, orSTART TRANSACTIONto release the locks and begin a new transaction.While any of these statements is in effect within the session, attempts to use
FLUSH TABLES ... FOR EXPORTproduce an error:FLUSH TABLES ... WITH READ LOCK FLUSH TABLES ... FOR EXPORT LOCK TABLES ... READ LOCK TABLES ... WRITEWhile
FLUSH TABLES ... FOR EXPORTis in effect within the session, attempts to use any of these statements produce an error:FLUSH TABLES WITH READ LOCK FLUSH TABLES ... WITH READ LOCK FLUSH TABLES ... FOR EXPORT