MySQL里flush tables是啥作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL里flush tables是啥作用?相关的知识,希望对你有一定的参考价值。

如题,flush tables是什么作用?一般用在什么场景下?跪求mysql高手解答。

mysql为了提高其性能,部分数据时缓存在内存中,因此要刷新表(清除缓存),就需要使用

FLUSH TABLES;

当然,如果是需要备份数据库,同时防止备份时候有新数据写入,且备份的是最新的:

FLUSH TABLES WITH READ LOCK;

具体你可以查询官方文档,其用处并不是很大,相反刷新权限我们时常用。但是,对于并发现很高、缓存很大的数据库,在备份时候都需要加上锁并刷新。


当然,高可用的系统,都是做了主从复制+热备。备份直接让从数据库做备份功能了。另外磁盘镜像也是一个好的备份方案。

追问

这里还有2个问题:

    刷新后性能是不是下降了?

    备份的时候加锁可以理解,但为什么备份的时候要FLUSH,缓存里的数据会对备份进行干扰?

追答

备份实际上就是逐行执行的sql语句。

刷新能得到最新的。

可以自己了解一下mysql缓存机制,这方面我也不是很清楚。毕竟我不是dbA

参考技术A

01、

mysql为了提高其性能,部分数据时缓存在内存中,因此要刷新表(清除缓存),就需要用:FLUSH TABLES;

02、

如果是需要备份数据库,同时防止备份时候有新数据写入,且备份的是FLUSH TABLES WITH READ LOCK;

03、

具体你可以查询官方文档,其用处并不是很大,相反刷新权限我们时常用。但是,对于并发现很高、缓存很大的数据库,在备份时候都需要加上锁并刷新。

FLUSH TABLES WITH READ LOCK

会话1:

mysql> FLUSH TABLES WITH READ LOCK; Query OK, 0 rows affected (0.18 sec) mysql> show processlist; +----+------+-----------------+------+---------+------+----------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------------+------+---------+------+----------+------------------+ | 12 | root | localhost:48850 | NULL | Sleep | 3603 | | NULL | | 13 | root | localhost:48851 | test | Sleep | 2665 | | NULL | | 14 | root | localhost:49828 | NULL | Query | 0 | starting | show processlist | +----+------+-----------------+------+---------+------+----------+------------------+ 3 rows in set (0.00 sec) mysql> use test; Database changed mysql> create table tt( a int); ERROR 1223 (HY000): Cant execute the query because you have a conflicting read lock
会话2:

mysql> use test; Database changed mysql> create table tt(a int);



会话1:

mysql> show processlist; +----+------+-----------------+------+---------+------+------------------------------+------------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------------+------+---------+------+------------------------------+------------------------+ | 12 | root | localhost:48850 | NULL | Sleep | 3712 | | NULL | | 13 | root | localhost:48851 | test | Sleep | 2774 | | NULL | | 14 | root | localhost:49828 | test | Query | 0 | starting | show processlist | | 15 | root | localhost:49833 | test | Query | 7 | Waiting for global read lock | create table tt(a int) | +----+------+-----------------+------+---------+------+------------------------------+------------------------+ 4 rows in set (0.00 sec)

 

1.当退去会话1后,就会自动释放锁,会话2,就可执行
2.unlock table

 

以上是关于MySQL里flush tables是啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL: 12 当更新Buffer Pool中的数据时,flush链表的作用

commit参数有什么作用?

单片机unsigned char code table[]是啥作用?

bootstrap table中formatter作用是啥

JSP都有哪些动作元素?作用分别是啥?

MySQL进程处于Waiting for table flush的分析