MySQL hol tárolja az adatokat a fájlrendszeren?

Szeretném kideríteni, hogy a MySQL a fájlrendszeren hol tárolja az adatait, illetve milyen fájlokat használ.

Egészen pontosan azt szeretném megtudni, hogy egy adatbázis módosításakor mely fájlokban (azaz táblákban) történt változás.
Erre azt találtam ki, hogy beugrom a /var/lib/mysql/adatbázisnév-be, nyomok neki egy MD5sum-ot, és szépen kiadja nekem a diff a különbséget.

De nem így történt :)
Miután a szerver elvégzett egy halom INSERT, UPDATE, SELECT parancsot, az összes fájlnak ugyanaz maradt az MD5 és az SHA1 összege is. Sőt, még a módosítási dátum is vagy két hónappal korábbi volt.

Gondoltam, hogy valahol máshol tárolja az adatokat, ezért elkezdtem kutakodni a mysql* programok között, és lefuttattam egy optimalizációt (mysqlcheck -Aovp -u root). Erre meg az összes, ott lévő fájl módosítási dátuma átállt mára.

Szerver újraindít, hátha akkor kiír valamit (ha már két hónapig nem tette), de semmi haszna.

Tudja valaki, hogyan lehet egyszerűen megnézni, melyik táblák/fájlok változtak egy oldalletöltés/etc hatására?

Hozzászólások

Az /etc/mysql/my.cnf -ban a datadir= bejegyzés tartalmazza az adatbázisok helyét.

Tudja valaki, hogyan lehet egyszerűen megnézni, melyik táblák/fájlok változtak egy oldalletöltés/etc hatására?

Belekukkantasz a php forrásba és megnézed mit használ. Vagy logoltatod a mysql -t egy fájlba (nagy terhelés mellett erős perfomancia visszaeséssel járhat!!), majd megnézed a logfájlt.

___________________________________________________________________
Lógnak a pálmafán a kókuszok .... :)
http://laszlo.co.hu/

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

Amugy ha a valtozasok erdekelnek akkor erdemesebb a dblayer-rel logoltatni (mar ha van, ha nincs akkor van vmi php extension amivel felul tudod definialni a php default fuggvenyeit es irhatsz wrappert hozza).

A halom dml után tolj egy flush tables -t, doksi szerint (:D) ez a buffereket kiiratja a vinyora. A mysql is jelentos belso bufferezessel megy(!=== mysql query cache!!), de lehet, hogy csak ugyesen a modify date-et allitgatja :D:D

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

Köszönöm szépen a javaslatokat, kipróbáltam mindent:

/etc/mysql/my.cnf-ben nem volt datadir változó, de a "SHOW VARIABLES LIKE 'datadir';" parancsra valóban a /var/lib/mysql választ kaptam.

A "FLUSH tables;" azt írta, hogy 0 rows affected, és ezután sem volt MD5 változás.

A megoldás úgy érzem, az lesz, hogy a my.cnf fájlba beviszem a "log=/var/lib/mysqld.log" sort, és így minden query-t naplóz, addig, amíg meg nem találom, hogy mik kellenek nekem pontosan.

Szóval a probléma megoldva, köszönöm még egyszer.

Bár azt nem értem, hogy hogy ír a fájlokba úgy, hogy nem változik az MD5 összeg sem, sem pedig a módosítási dátum.

Ott a pont :)

Eddig bele sem gondoltam, hogy ez különbség lehet, de valóban ezért nem módosul a többi tábla.
Az InnoDB az ibdata* fájlban tárolja a dolgait.
A könyvtárban pedig csak *.frm fájlok vannak, így azért nem változtak a különböző SQL utasítások hatására, mivel csak leíró szerepük van.

Na, ma is tanultam valamit :)

information_schema db TABLES tablaja nem pont erre valo?
irja, hogy melyik tabla mikor jott letre, mikor modosult, satobbi.
en ebben a db-ben neznek korul.

Tyrael

Erről eddig nem is tudtam, de megnéztem, természetesen.

Az eredmény:
Azon a táblának oszlopai (CREATE_TIME, UPDATE_TIME, CHECK_TIME), amiben biztosan van változás, mind NULL-al vannak kitöltve. Kivéve az elsőt, mivel ott az ellenőrzés ideje van beírva (ami a CHECK_TIME-ban kéne, hogy szerepeljen).