MySql的flush用法

本文详细介绍了 MySQL 中 Flush 命令的各种用途及实现方式,包括如何清除主机缓存表、重置权限缓存、关闭表以及进行数据备份等操作。此外还对比了 Flush 和 Reset 命令的不同之处。
MySQL的FLUSH句法
今天仔细看了下Flush语法,同时在工作中也经常使用Flush命令,在这儿汇总下。MySQL的FLUSH句法(清除或者重新加载内部缓存) FLUSH flush_option [,flush_option],如果你想要清除一些MySQL使用内部缓存,你应该使用FLUSH命令。为了执行FLUSH,你必须有reload权限。
flush_option 可以是下列任何东西:

HOSTS      这个用的最多,经常碰见。主要是用来清空主机缓存表。如果你的某些主机改变IP数字,或如果你得到错误消息Host ... isblocked,你应该清空主机表。当在连接MySQL服务器时,对一台给定的主机有多于 max_connect_errors个错误连续不断地发生,MySQL为了安全的需要将会阻止该主机进一步的连接请求。清空主机表允许主机再尝试连接。


LOGS        关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。 

PRIVILEGES  这个也是经常使用的,每当重新赋权后,为了以防万一,让新权限立即生效,一般都执行一把,目地是从数据库授权表中重新装载权限到缓存中。


TABLES      关闭所有打开的表,同时该操作将会清空查询缓存中的内容。

FLUSH TABLES WITH READ LOCK  关闭所有打开的表,同时对于所有数据库中的表都加一个读锁,直到显示地执行unlock tables,该操作常常用于数据备份的时候。解锁的语句就是unlock tables

FLUSH TABLES WITH READ LOCK对于数据库是全局的表锁定,如果只想锁定几个表,可以用LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} 。这个命令同样需要unlock tables来解锁。

read-lock: 允许其他并发的读请求,但阻塞写请求,即可以同时读,但不允许任何写。也叫共享锁。write-lock: 不允许其他并发的读和写请求,是排他的(exclusive)。也叫独占锁

 

STATUS      重置大多数状态变量到0。


MASTER      删除所有的二进制日志索引文件中的二进制日志文件,重置二进制日志文件的索引文件为空,创建一个新的二进制日志文件,不过这个已经不推荐使用,改成reset master 了。可以想象,以前自己是多土啊,本来一条简单的命令就可以搞定的,却要好几条命令来,以前的做法是先查出来当前的二进制日志文件名,再用purge 操作。


QUERY CACHE  重整查询缓存,消除其中的碎片,提高性能,但是并不影响查询缓存中现有的数据,这点和Flush table 和Reset Query  Cache(将会清空查询缓存的内容)不一样的。 


SLAVE        类似于重置复制吧,让从数据库忘记主数据库的复制位置,同时也会删除已经下载下来的relay log,与Master一样,已经不推荐使用,改成Reset Slave了。这个也很有用的。


一般来讲,Flush操作都会记录在二进制日志文件中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不会记录,因此上述操作如果记录在二进制日志文件中话,会对从数据库造成影响。

注意:Reset操作其实扮演的是一个Flush操作的增强版的角色。

### 正确使用 `FLUSH PRIVILEGES` 刷新权限配置 在 MySQL 中,当对用户的权限进行了更改或新增用户时,为了使这些更改立即生效,通常需要执行 `FLUSH PRIVILEGES` 命令。此命令会重新加载存储在内存中的权限数据,从而确保最新的权限设置被应用。 以下是关于如何正确使用该命令的相关说明: #### 权限更新流程 1. **确认当前用户是否存在并具有适当权限** 需要先检查数据库中是否存在目标用户以及其权限状态。可以通过查询 `mysql.user` 表来验证特定用户的信息[^2]。 查询语句如下: ```sql SELECT host, user FROM mysql.user; ``` 2. **创建新用户(如果不存在)** 如果发现缺少某个用户(例如 `'root'@'%'`),可以按照以下方式创建新用户并分配初始密码: ```sql CREATE USER 'root'@'%' IDENTIFIED BY '你的强密码'; ``` 3. **授予必要的权限** 授予指定用户所需的全部或部分权限。例如,赋予完全控制权可使用以下 SQL 语句: ```sql GRANT ALL ON *.* TO 'root'@'%'; ``` 4. **刷新权限缓存** 执行完上述操作后,运行 `FLUSH PRIVILEGES;` 命令以通知服务器重新读取权限表的内容: ```sql FLUSH PRIVILEGES; ``` #### 注意事项 - 在生产环境中应谨慎处理超级管理员账户 (`root`) 的远程访问权限,建议仅允许受信任网络内的连接尝试。 - 使用 `%` 作为主机名通配符虽然方便,但也可能带来安全风险;推荐尽可能限定具体的 IP 地址范围代替通用匹配模式。 - 修改完毕后务必测试登录功能是否正常工作,避免因错误配置导致无法管理实例的情况发生。 ```bash # 启动服务 (适用于基于 systemd 的 Linux 发行版) systemctl enable mysqld --now systemctl status mysqld.service ``` 以上步骤展示了完整的权限调整过程及其最后一步——调用 `FLUSH PRIVILEGES` 方法的重要性[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值