Domanda

Si stanno avendo un fastidio con il nostro sito PHP / MySQL, in quanto sembra i dati della cache del database e le nostre pagine PHP stanno mostrando di registri aggiornati. In realtà, ci sono pagine che puntano a URL che sono stati completamente rimossi dal database, ma non mostrano record aggiornati o dati addirittura mancanti.

Se abbiamo la pazienza di aspettare diverse ore (non definito), i dati alla fine vedere. Ho aggiunto le intestazioni no-cache regolari tramite PHP su tutte le pagine, ma non sembra influenzare l'uscita di MySQL.

La parte PHP del sito è immediatamente però aggiornabile, e spettacoli HTML ecc cambia immediatamente. C'è un modo per forzare MySQL per disegnare solo i dati freschi dalle sue domande? Ho pensato che questo era il modo in cui ha funzionato in ogni modo!

Grazie, Chris

P.S. Qui ci sono i codici PHP che sto usando per cercare di forzare una situazione senza cache:

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
È stato utile?

Soluzione

Si potrebbe fare SELEZIONA SQL_NO_CACHE . Questo è usato da mysqldump per scaricare sempre nuovi dati in un file di testo. Questo può anche aiutare a filo pool buffer innodb se la tabella selezionata viene InnoDB.

Se non è possibile maniuplate le istruzioni SELECT, quindi impostare query_cache_type a 0 . Che farà tutto seleziona si comportano come SELEZIONA SQL_NO_CACHE. Si può fare questo senza mysql riavviare:

Passaggio 1) Aggiungere questo al /etc/my.cnf

[mysqld]
query_cache_type=0

Punto 2) Eseguire questo client mysql

SET GLOBAL query_cache_type = 0;

PAROLA FINALE

In questo modo si può aumentare lettura I / O. Si può anche prendere in considerazione l'impostazione innodb_max_dirty_pages_pct = 0 a keey nel buffer pool InnoDB con i dati più freschi che è pienamente scaricati su disco possibile.

Passaggio 1) Aggiungere questo al /etc/my.cnf

[mysqld]
query_cache_type=0
innodb_max_dirty_pages_pct=0

Punto 2) Eseguire questo client mysql

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

UPDATE 2011-05-20 11:17

E 'possibile tutte le connessioni DB hanno scaduta dal punto di vista di PHP.

Vedere in caso di riavvio di MySQL e Apache farlo.

Inoltre, assicurarsi che i valori di timeout per MySQL, PHP e Apache tutti i match up

Inoltre, questo

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

Questo aiuta a vedere se tutte le connessioni DB morti non sono stati rilascio da parte del sistema operativo

Altri suggerimenti

Niente che MySQL non porterà a dati non aggiornati - non la cache delle query, non SQL_CACHE, non il key_buffer, non il buffer_pool. Il problema deve essere al di fuori di MySQL.

Probabilmente stai usando uno di questi acceleratori di cache PHP generici: http://en.wikipedia.org/wiki/List_of_PHP_accelerators

Trovo apc e eaccelerator più usato in natura.

Ci sono altre cache PHP anche disponibile con ogni quadro o applicazione in uso, ad esempio, utilizzando Wordpress wp-cache o di cache totale w3, modelli di Smarty utilizzando la cache smarty, etc ..

Si dice "Il nostro sito", così sto cercando di indovinare sapresti se si sta utilizzando cache DB come SQL-relè o mysql-proxy-cache, cache o di front-end come proxy inversi, calamari e vernici, o mem varianti -cached.

eseguire il debug PHP pagine web esterni / senza il server web per aiutare a determinare dove il caching è in corso.

secondo me, suona come la vostra applicazione sta utilizzando memcache o un cartella su disco della cache. Per esempio, Wordpress ha i plugin di cache che possono utilizzare un cartella / cache /. Se si dispone di un tale cartella, provare a cancellare tutti i file fuori di esso che assomigliano hash, come ad esempio:

9a72de66e3c2f853d08352d8e78e7628
7e688f6a4cb633965d9883bb35cb8575
799f242667b315796ffe8f8d4bb4a3e2
f9e46e6486ca03ec62abc67d011f2a89

Questo è il codice più semplice per selezionare e visualizzare i record dalla tabella del database MySQL e la visualizzazione in 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);

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top