FLUSH语句
FLUSH [NO_WRITE_TO_BINLOG |LOCAL ] { flush_option [, flush_option] ... | tables_option } flush_option: { BINARYLOGS |ENGINE LOGS |ERROR LOGS |GENERAL LOGS |HOSTS |LOGS |PRIVILEGES |OPTIMIZER_COSTS |RELAY LOGS [FOR CHANNEL channel] |SLOW LOGS |STATUS |USER_RESOURCES } tables_option: {TABLES |TABLES tbl_name [, tbl_name] ... |TABLES WITH READ LOCK |TABLES tbl_name [, tbl_name] ...WITH READ LOCK |TABLES tbl_name [, tbl_name] ...FOR EXPORT }
该FLUSH语句具有多种变体形式,可以清除或重新加载各种内部缓存,刷新表或获取锁。要执行FLUSH,您必须具有RELOAD特权。特定的刷新选项可能需要其他特权,如稍后所述。
注意无法
FLUSH在存储的函数或触发器中发出语句。但是,您可以FLUSH在存储过程中使用,只要不从存储函数或触发器中调用它们即可。请参见“对存储程序的限制”。
默认情况下,服务器将FLUSH语句写入二进制日志,以便它们复制到复制从属服务器。要禁止记录日志,请指定可选NO_WRITE_TO_BINLOG关键字或其别名LOCAL。
注意
FLUSH LOGS,FLUSH BINARY LOGS,FLUSH TABLES WITH READ LOCK(带或不带表列表),并没有写入到二进制日志在任何情况下,因为如果复制到从它们会造成问题。FLUSH TABLES tbl_name... FOR EXPORT
该FLUSH语句导致隐式提交。请参见“START TRANSACTION,COMMIT和ROLLBACK语句”。
所述中mysqladmin实用程序提供了一个命令行界面一些刷新操作,使用命令,如flush-hosts,flush-logs,flush-privileges,flush-status,和flush-tables。请参见“mysqladmin-用于管理MySQL服务器的客户端”。
向服务器发送SIGHUP或SIGUSR1信号会导致发生若干刷新操作,这些操作与FLUSH语句的各种形式相似。信号可以由root服务器进程发送或由拥有服务器进程的帐户发送。它们使无需连接服务器即可执行适用的刷新操作(这些操作需要具有RELOAD特权的帐户)。请参见“ MySQL中的Unix信号处理”。
该RESET声明类似于FLUSH。有关将语句与复制一起使用的信息,请参见“ RESET语句”RESET。
以下列表描述了允许的FLUSH语句flush_option值。有关FLUSH TABLES变体的说明,请参见 FLUSH TABLES语法。
- FLUSH BINARY LOGS- 关闭并重新打开服务器正在写入的任何二进制日志文件。如果启用了二进制日志记录,则二进制日志文件的序列号将相对于前一个文件增加一个。 
- FLUSH ENGINE LOGS- 关闭并重新打开已安装的存储引擎的所有可刷新日志。这导致 - InnoDB将其日志刷新到磁盘。
- FLUSH ERROR LOGS- 关闭并重新打开服务器正在写入的任何错误日志文件。 
- FLUSH GENERAL LOGS- 关闭并重新打开服务器正在写入的任何常规查询日志文件。 
- FLUSH HOSTS- 清空主机缓存和显示 - host_cache缓存内容的性能架构表,并取消阻止所有被阻塞的主机。请参见“ DNS查找优化和主机缓存”。- 如果您的某些主机更改了IP地址,或者对于来自合法主机的连接出现了错误消息,请刷新主机缓存。(请参见第B.4.2.5节,“主机'host_name'被阻止”。)当连接到MySQL服务器时,给定主机连续发生多个错误时,MySQL认为有问题,并阻止该主机进行进一步的连接请求。刷新主机缓存将启用来自主机的进一步连接尝试。默认值为 100。为避免出现此错误消息,请以较大的值启动服务器。 - Host 'host_name' is blocked- max_connect_errors- max_connect_errors- max_connect_errors
- FLUSH LOGS- 关闭并重新打开服务器正在写入的任何日志文件。如果启用了二进制日志记录,则二进制日志文件的序列号将相对于前一个文件增加一个。如果启用了中继日志记录,则中继日志文件的序列号将相对于前一个文件增加一个。 - FLUSH LOGS对用于常规查询日志或慢速查询日志的表没有任何影响(请参见“选择常规查询日志和慢速查询日志输出目标”)。
- FLUSH OPTIMIZER_COSTS- 重新读取成本模型表,以便优化器开始使用存储在其中的当前成本估算值。服务器会为任何无法识别的条目向错误日志中写入警告。(有关这些表的信息,请参见“优化器成本模型”。)此操作仅影响在刷新之后开始的会话。现有会话继续使用开始时的最新成本估算。 
- FLUSH PRIVILEGES- 从 - mysql系统架构中的授权表重新加载特权。作为此操作的一部分,服务器读取- global_grants包含动态特权分配的表,并注册在其中找到的所有未注册特权。- 如果 - --skip-grant-tables在服务器启动时指定了禁用MySQL特权系统的选项,则- FLUSH PRIVILEGES提供一种在运行时启用特权系统的方法。- FLUSH PRIVILEGES重置登录失败跟踪(如果使用来启动服务器,则启用它- --skip-grant-tables)并解锁所有临时锁定的帐户。请参见“帐户密码管理”。- 释放内存缓存服务器作为的结果 - 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]- 关闭并重新打开服务器正在写入的任何中继日志文件。如果启用了中继日志记录,则中继日志文件的序列号将相对于前一个文件增加一个。 - 该子句使您可以命名该语句应用于哪个复制通道。执行以刷新特定复制通道的中继日志。如果没有命名通道,并且不存在额外的复制通道,则该语句将应用于默认通道。如果没有命名通道,并且存在多个复制通道,则该语句适用于所有复制通道。有关更多信息,请参见“复制通道”。 - FOR CHANNEL channel- FLUSH RELAY LOGS FOR CHANNEL channel
- FLUSH SLOW LOGS- 关闭并重新打开服务器正在写入的所有慢查询日志文件。 
- FLUSH STATUS- 此选项将所有活动会话的会话状态添加到全局状态变量,重置所有活动会话的状态,并重置断开连接的会话聚合的帐户,主机和用户状态值。请参见“性能模式状态变量表”。在调试查询时,此信息可能有用。 
- FLUSH USER_RESOURCES- 将所有每小时用户资源重置为零。这使达到每小时连接,查询或更新限制的客户端可以立即恢复活动。 - FLUSH USER_RESOURCES不适用于由- max_user_connections系统变量控制的最大同时连接数限制。请参见“设置帐户资源限制”。
冲洗表语法
FLUSH TABLES刷新表,并根据所使用的变体获取锁。语句中TABLES使用的任何变体FLUSH必须是唯一使用的选项。FLUSH TABLE是的同义词FLUSH TABLES。
注意此处的指示表通过关闭表进行刷新的描述适用于
InnoDB,这与的描述不同,后者将表内容刷新到磁盘,但保持打开状态。只要其他活动不修改表文件,这仍然允许在表打开时复制表文件。
- FLUSH TABLES- 关闭所有打开的表,强制所有使用中的表关闭,并刷新准备好的语句缓存。有关预备语句缓存的信息,请参见“缓冲和缓存”。 - FLUSH TABLES活动时不允许- LOCK TABLES ... READ。要刷新和锁定表,请改用。- FLUSH TABLES tbl_name... WITH READ LOCK
- FLUSH TABLES tbl_name[,tbl_name]...- 具有一个或多个用逗号分隔的表名的列表,该语句类似于 - FLUSH TABLES没有名称的语句,只是服务器仅刷新命名表。如果命名表不存在,则不会发生错误。
- FLUSH TABLES WITH READ LOCK- 关闭所有打开的表并使用全局读取锁定锁定所有数据库的所有表。如果您拥有可以及时拍摄快照的文件系统(例如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不会阻止服务器在日志表中插入行(请参见“选择常规查询日志和慢查询日志输出目标”)。
- FLUSH TABLES tbl_name[,tbl_name]... WITH READ LOCK- 该语句刷新并获取命名表的读取锁。该语句首先获取表的独占元数据锁,因此它等待打开这些表的事务完成。然后,该语句从表缓存中刷新表,重新打开表,获取表锁(如 - LOCK TABLES ... READ),并将元数据锁从排他锁降级为共享锁。语句获取锁并降级元数据锁后,其他会话可以读取但不能修改表。- 因为此语句获取表锁,所以 - LOCK TABLES除- RELOAD使用任何- FLUSH语句所需的特权外,您还必须具有每个表的特权。- 该语句仅适用于现有的基础(非 - TEMPORARY)表。如果名称引用基础表,则使用该表。如果引用- TEMPORARY表,则将其忽略。如果名称适用于视图,则发生- ER_WRONG_OBJECT错误。否则,发生- ER_NO_SUCH_TABLE错误。- 使用 - 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表。它确保已将对命名表的更改刷新到磁盘上,以便可以在服务器运行时进行二进制表副本的复制。- 该语句如下所示: - 它获取命名表的共享元数据锁。只要其他会话的活动事务已修改了这些表或为其持有表锁,该语句就会阻塞。获取锁后,该语句将阻止尝试更新表的事务,同时允许继续进行只读操作。
- 它检查表的所有存储引擎是否都支持FOR EXPORT。如果没有,则发生ER_ILLEGAL_HA错误,并且语句失败。
- 该语句通知每个表的存储引擎使表准备导出。存储引擎必须确保将所有未完成的更改写入磁盘。
- 该语句将会话置于锁定表模式,以便在FOR EXPORT语句完成时不会释放较早获取的元数据锁。
 - 该 - FLUSH TABLES ... FOR EXPORT语句要求您具有- SELECT每个表的特权。因为此语句获取表锁,所以- LOCK TABLES除- RELOAD使用任何- FLUSH语句所需的特权外,您还必须具有每个表的特权。- 该语句仅适用于现有的基本(非 - TEMPORARY)表。如果名称引用基本表,则使用该表。如果它引用一个- TEMPORARY表,则将其忽略。如果名称适用于视图,- ER_WRONG_OBJECT则会发生错误。否则,将- ER_NO_SUCH_TABLE发生错误。- InnoDB支持- FOR EXPORT具有自己- .ibd文件文件的表(即在- 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实例中的过程,请参见“导入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 
