FLUSH语句与KILL语句

2020-12-01
FLUSH [NO_WRITE_TO_BINLOG | LOCAL] {
    flush_option [, flush_option] ...
  | tables_option
}

FLUSH语句会导致隐式提交
无法在存储的函数或触发器中使用FLUSH语句。但是可以在存储过程中使用FLUSH
默认情况下,FLUSH语句将写入二进制日志,以便它们复制到副本。要禁止记录日志,请指定可选NO_WRITE_TO_BINLOG或LOCAL
FLUSH LOGS,FLUSH BINARY LOGS,FLUSH TABLES WITH READ LOCK,不会在任何情况下写入到二进制日志在任何情况下,因为如果复制到一个副本,他们会造成问题。

FLUSH BINARY LOGS
关闭并重新打开服务器正在写入的任何二进制日志文件。如果启用了二进制日志记录,则二进制日志文件的序列号将相对于前一个文件增加一个。
该操作对用于二进制和中继日志的表没有任何影响

FLUSH PRIVILEGES
从mysql系统数据库的授权表中重新读取权限。
如果在服务器启动时指定了--skip-grant-tables禁用了MySQL权限系统,则FLUSH PRIVILEGES提供一种在运行时启用权限系统的方法。
释放服务器由于GRANT、CREATE USER、CREATE server和INSTALL PLUGIN语句而缓存的内存。相应的REVOKE、DROP USER、DROP SERVER和UNINSTALL PLUGIN语句不会释放此内存,因此对于执行导致缓存的语句的许多实例的服务器来说,缓存内存的使用会增加,除非使用刷新特权释放缓存内存

FLUSH USER_RESOURCES
将所有每小时用户资源指标重置为零。
重置资源指示器可使已达到每小时连接,查询或更新限制的客户端立即恢复活动。FLUSH USER_RESOURCES不适用于由max_user_connections系统变量控制的最大同时连接数限制

FLUSH TABLES
关闭所有打开的表,强制关闭所有正在使用的表,并刷新查询缓存和准备好的语句缓存。FLUSH TABLES也会从查询缓存中删除所有查询结果
LUSH TABLES活动时不允许使用LOCK TABLES ... READ。要刷新和锁定表,请使用FLUSH TABLES tbl_name ... WITH READ LOCK

FLUSH TABLES tbl_name [, tbl_name] ...
使用一个或多个用逗号分隔的表名的列表,此操作类似于FLUSH TABLES没有名称的操作,只是服务器仅刷新命名的表。如果命名表不存在,则不会发生错误。

FLUSH TABLES WITH READ LOCK
关闭所有打开的表并使用全局读取锁定锁定所有数据库的所有表。
FLUSH TABLES WITH READ LOCK获取全局读取锁而不是表锁,因此它与表锁和隐式提交的行为不同, 不会受到与LOCK TABLES和UNLOCK TABLES相同的行为
UNLOCK TABLES只在当前任何表已被锁定的情况下隐式提交活动事务。对于带有读锁的表,执行FLUSH TABLES WITH READ LOCK之后的UNLOCK TABLES语句不会执行commit操作,因为后面的语句不会获取表锁。
开始事务不会释放通过FLUSH TABLES WITH READ LOCK获取的全局读取锁 。

FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK
刷新并获取命名表的读取锁。
因为此操作获取表锁,需要权限:LOCK TABLES、每个表的RELOAD权限。
该操作首先获取表的独占元数据锁,因此它等待打开这些表的事务完成。然后,该操作从表缓存中刷新表,重新打开表,获取表锁,然后将元数据锁从排他锁降级为共享锁。在操作获取锁并降级元数据锁后,其他会话可以读取但不能修改表。

FLUSH RELAY LOGS [FOR CHANNEL channel]
关闭并重新打开服务器正在写入的任何中继日志文件。如果启用了中继日志记录,则中继日志文件的序列号将相对于前一个文件增加一个。
该子句可以指定通道名以刷新特定复制通道的中继日志。如果没有命名通道,并且不存在额外的复制通道,则该操作将应用于默认通道。如果没有命名通道,并且存在多个复制通道,则该操作将应用于所有复制通道

FLUSH HOSTS
清空主机缓存和显示缓存内容的性能架构host_cache表,并取消阻止所有被阻止的主机。

FLUSH SLOW LOGS
关闭并重新打开服务器正在写入的所有慢查询日志文件。
该操作对用于慢查询日志的表没有影响

FLUSH ENGINE LOGS
关闭并重新打开已安装的存储引擎的所有可刷新日志。这导致InnoDB将其日志刷新到磁盘。

FLUSH ERROR LOGS
关闭并重新打开服务器正在写入的任何错误日志文件。

FLUSH GENERAL LOGS
关闭并重新打开服务器正在写入的任何常规查询日志文件。
该操作对用于常规查询日志的表没有影响

FLUSH LOGS
关闭并重新打开服务器正在写入的任何日志文件
KILL [CONNECTION | QUERY] processlist_id
与mysqld的每个连接均在单独的线程中运行。可以使用该语句杀死线程
修饰符:
CONNECTION与没有修饰符相同 :在终止正在执行的任何语句之后终止与给定processlist_id关联的连接。
QUERY:终止连接当前正在执行的语句,但保持连接本身不变

返回当前线程的ID值
SELECT CONNECTION_ID()
输出线程的信息
SHOW PROCESSLIST

在大多数情况下,线程死亡可能需要一些时间,因为仅在特定时间间隔检查kill标志:

  1. 在SELECT操作期间,对于ORDER BY和GROUP BY循环,在读取行块之后检查标志。如果设置了kill标志,则终止该语句。
  2. 使表复制的ALTER TABLE操作定期检查从原始表中读取的每个复制行的kill标志。如果设置了kill标志,则终止该语句并删除临时表。KILL语句不等待确认就返回,但是KILL标志检查会在相当短的时间内终止操作。中止操作以执行任何必要的清理也需要一些时间
  3. 在UPDATE或 DELETE操作期间,在读取每个块和更新或删除每个行之后检查kill标志。如果设置了kill标志,则终止该语句。如果不使用事务,则不会回滚更改。
  4. GET_LOCK()中止并返回 NULL。
  5. 如果线程在表锁处理程序中(state: Locked),则表锁将迅速中止
  6. 如果线程在写调用中等待空闲的磁盘空间,那么写操作将以“磁盘已满”错误消息中止。
{/if}