AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 2843
Accepted
user1867
user1867
Asked: 2011-05-21 05:13:30 +0800 CST2011-05-21 05:13:30 +0800 CST 2011-05-21 05:13:30 +0800 CST

为什么 MySQL 在我们的动态 PHP 站点上缓存数据?

  • 772

我们对我们的 PHP/MySQL 站点感到烦恼,因为它似乎缓存了数据库中的数据,并且我们的 PHP 页面显示了过时的记录。事实上,有些页面链接到的 URL 已完全从数据库中删除,但它们没有显示更新的记录,甚至没有显示数据。

如果我们有耐心等待几个(未定义)小时,数据最终会出现。我已经通过 PHP 在所有页面上添加了常规的无缓存标头,但它似乎不会影响 MySQL 输出。

不过,该网站的 PHP 部分可以立即更新,并立即显示 HTML 等更改。有没有办法强制 MySQL 只从其查询中提取新数据?无论如何,我认为这就是它的工作方式!

谢谢,克里斯

PS这是我用来尝试强制无缓存情况的php代码:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Always modified
header("Cache-Control: private, no-store, no-cache, must-revalidate"); // HTTP/1.1 
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
mysql cache
  • 5 5 个回答
  • 9605 Views

5 个回答

  • Voted
  1. Rick James
    2011-05-21T12:46:11+08:002011-05-21T12:46:11+08:00

    MySQL 所做的任何事情都不会导致数据陈旧——不是 Query 缓存,不是 SQL_CACHE,不是 key_buffer,不是 buffer_pool。问题必须在 MySQL 之外。

    • 7
  2. Best Answer
    RolandoMySQLDBA
    2011-05-21T05:26:24+08:002011-05-21T05:26:24+08:00

    你可以做SELECT SQL_NO_CACHE。mysqldump 使用它来始终将新数据转储到文本文件中。如果要选择的表是 InnoDB,这也可能有助于刷新 innodb 缓冲池。

    如果您无法操作 SELECT 语句,则将 query_cache_type 设置为 0。这将使所有 SELECT 的行为类似于 SELECT SQL_NO_CACHE。您可以在不重新启动 mysql 的情况下执行此操作:

    步骤 1) 将此添加到 /etc/my.cnf

    [mysqld]
    query_cache_type=0
    

    步骤 2) 在 mysql 客户端中运行它

    SET GLOBAL query_cache_type = 0;
    

    最后一句话

    这样做可能会增加读取 I/O。您可能还需要考虑设置 innodb_max_dirty_pages_pct = 0 以保持 innodb 缓冲池具有尽可能完全刷新到磁盘的最新数据。

    步骤 1) 将此添加到 /etc/my.cnf

    [mysqld]
    query_cache_type=0
    innodb_max_dirty_pages_pct=0
    

    步骤 2) 在 mysql 客户端中运行它

    SET GLOBAL query_cache_type = 0;
    SET GLOBAL innodb_max_dirty_pages_pct = 0;
    

    更新 2011-05-20 11:17

    从 PHP 的有利位置来看,所有数据库连接都可能超时。

    看看重新启动 MySQL 和 apache 是否会这样做。

    另外,确保 MySQL、PHP 和 Apache 的超时值都匹配

    另外,这样做

    netstat | grep [m3][y3][s0][q6] | grep TIME_WAIT
    

    这有助于查看操作系统是否未释放任何死数据库连接

    • 2
  3. joe
    2011-05-24T18:19:12+08:002011-05-24T18:19:12+08:00

    您可能正在使用以下通用 PHP 缓存加速器之一: http ://en.wikipedia.org/wiki/List_of_PHP_accelerators

    我发现 apc 和 eaccelerator 在野外最常用。

    每个使用的框架或应用程序还可以使用其他 PHP 缓存,例如,使用 wp-cache 或 w3 总缓存的 Wordpress,使用 smarty 缓存的 smarty 模板等。

    你说“我们的网站”,所以我猜你会知道你是使用 SQL-relay 或 mysql-proxy-cache 之类的 DB 缓存,还是反向代理、squid 和 varnish 之类的前端缓存,或者 mem-cached 变体.

    在 Web 服务器之外/没有 Web 服务器的情况下调试您的 PHP 网页,以帮助确定缓存发生的位置。

    • 2
  4. randomx
    2011-05-22T17:03:25+08:002011-05-22T17:03:25+08:00

    恕我直言,听起来您的应用程序正在使用memcache 或基于磁盘的缓存文件夹。例如,Wordpress 有可以利用/cache/文件夹的缓存插件。如果您有这样的文件夹,请尝试删除其中所有看起来像哈希的文件,例如:

    9a72de66e3c2f853d08352d8e78e7628
    7e688f6a4cb633965d9883bb35cb8575
    799f242667b315796ffe8f8d4bb4a3e2
    f9e46e6486ca03ec62abc67d011f2a89
    
    • 1
  5. aneeq
    2012-04-27T02:39:22+08:002012-04-27T02:39:22+08:00

    这是从 MySQL 数据库表中选择和显示记录并在 PHP 中显示的最简单的代码。

    $cn=mysql_connect($db_host,$db_user,$db_password) or die(mysql_error());
    mysql_select_db($db_name,$cn) or die(mysql_error());
    
    $sql = “SELECT field_name FROM table_name”;
    $rs = mysql_query($sql) or die(mysql_error());
    
    while($row = mysql_fetch_array($rs)){
    
    echo $field_name = $row["field_name"];
    echo “</br>”;
    
    }
    mysql_free_result($rs);
    

    来源: http: //phphelp.co/2012/04/26/how-to-select-and-display-mysql-records-data-in-php

    • 0

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve