Fórumok
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ások
É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)
--
Igen.
Ugyanezt csinálja az optimize table is ha innodb-re fut.
Hasznos info, koszonom.
--
Optimize table az innodb-kre?
Az lefuthat? Nem csak myisamra jo?
--