ibdata shrink [megoldva]

 ( ne0 | 2012. június 19., kedd - 9:47 )

Van egy 15GB-s ibdata-m, ami valójában már kevesebb adatot tartalmazhat, csak nem lehet karcsúsítani.
Dumpolnám és különálló fájlokba raknám azokat a táblákat, amik még benne vannak, csak nem tudom, hogy mely táblák érintettek.
Tudtok valami egyszerű lekérdezést, ami megmondja, hogy egy tábla melyik fájlban található?
Mert így nem kellene a teljes adatbázist kidumpolni.

Köszi!

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Én egy favágó módszerrel takarítottam ki. :) Hátha segít neked.

http://pastebin.com/raw.php?i=zGNewBhB

--
maszili

igen, ezt én is megtaláltam, csak pont szelektíven szeretném
azért nem akarok 200GB-t dumpolni, mert 100MB maradt még a ibdata-ban
csak az a baj, hogy nem tudom megállapítani melyik 100Mb az...
köszi!

Kb. 20 perccel ezelőtt töltöttem fel... :)

Hát akkor módosítsd a szkriptet, hogy csak a megtalált táblákat dumpolja.
Bár szerintem ez kicsit megbonyolítja a dolgot mert egy szinttel részletesebben kell foglalkozni a dologgal. Nem elég az adatbázis (ahol innodb van használva) hanem azon belül a táblákkal kell foglalkozni.

- Tehát megkeresed az innodb-t használó táblákat
- A megtalált táblákról készítesz dumpot
- Eldobálod a táblákat
- Mysql stop
- innodb fájlok törlése
- Mysql start
- Táblák visszatöltése a megfefelő adatbázisokba.

--
maszili

nem az összeset akarom, mert van ami szeparált fájlban van
szóval csak azokra kellene egy szűrés ami ibdata1-ben van

Ja értem. Hát akkor sajnos nemtom...

--
maszili

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'innodb' limit 1 \G
ezek kozott nez korul,hatha valamelyik ertek rautal :D

sajna nem :(

emlitett lekerdezes | awk -val szetszedbe es megnezve,hogy a db/table.ibd letezik-e, es van merete, ha nem akkor biztosan ezek a tablak vannak kulon.
valami ilyesmi:
cd /var/lib/mysql
echo "SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = 'innodb';" | mysql | while read line
do
if [ -s `echo $line.ibd |sed 's/ /\//'` ]
then
true
else
echo $line
fi
done
Normalis esetben a fejlecet meg kell kapnod,hogy rossz.

szuper, működik, köszönöm! :)

"szeparalt file" alatt a myisam storage engine-t erted?

szerintem innodb_file_per_table-re gondol.

amugy szerintem egy INSERT INTO tmp SELECT * FROM tabla, drop table tabla, rename table tmp table komboval is meg lehet oldani, es nemkell dumpolni.

de lehet mas is van.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

igen, a többi már a innodb_file_per_table bekapcsolása után keletkezett
csak nem tudom hogy melyik még előtte
200GB, 60 tábla a többi adat, szóval selecteket se futtatnék szívesen... :)

megnezed hogy melyik tablak innodb-k, megnezed hogy a $DATABASE/$TABLE.ibd fajl megvan-e, ha nincs akkor az a kozos nagy cuccban van.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Akkor egyszeru: siman alter table XXX type=innodb -t kell tolni az osszes tablara. Az keszit egy ideiglenes tablat (a jelenlegi konfiggal, tehat file-ban), majd kicsereli a regivel.

Ez akkor is mukodhet, ha mar innodb? (Nekem is kellene egy ilyen megoldas)
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Igen.

Ugyanezt csinálja az optimize table is ha innodb-re fut.

Hasznos info, koszonom.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Optimize table az innodb-kre?

Az lefuthat? Nem csak myisamra jo?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal