Összes MySQL adatbázis törlése
A minap saját (teszt) gépemen elharapództak az adatbázisok, így itt volt az ideje törölni őket. Mivel mindent nem akartam, a mysql DROP parancsával pedig nem lehet több adatbázist egyszerre eldobni, ezért nem az egész /var/lib/mysql könyvtárat töröltem, hanem összeraktam egy mini szkriptet.
Mint látható, egy pipe-okkal ( | ) egybeágyazott parancssorozatról van szó, ami annyit csinál, hogy lekérdezi az adatbázisokat, majd greppel kiszűri a sallangot (Database szöveg) majd a nem törlendő adatbázisokat: mysql (ahol a mysql a rendszerdolgait tárolja), information_schema, AMITNEMAKAROKTOROLNI, AMITNEMAKAROKTOROLNI2. Ezután a gawk segítségével változóba rakjuk az eredményként kapott sorok első hasábját (ami az adatbázisok lesznek), valamit elé írjuk a drop databapes parancsot valamint utána, hogy várjon 0,1 másodpercet majd ezt az egészet átadjuk a mysql-nek végrehajtásra.
mysql -ufelhasznalo -pjelszo -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema| grep -v AMITNEMAKAROKTOROLNI | grep -v AMITNEMAKAROKTOROLNI2 | gawk '{print "drop database " $1 ";select sleep(0.1);"}' | mysql -ufelhasznalo -pjelszo
Helyesen: pipe-okkal, vagy szlengesen: pájpokkal. Csak hogy érthető legyen.
Szép megoldás!
Ezért szeretem a lin. -t.
Kicsit szúrta nekem is a pipok. B-) Razide megelőzött.
Ha sok kihagyandó adatbázisod van, akkor még a ‘grep -v’ -t lehet etetni ciklusban file -ból. (bár az már csúnyává válik)
Másik végéről megragadva a menyecskét. Gyepálás előtt lehet kapni az alkalmon és csinálni egy szép teljes mentést a meglévő adatbázisokból. Utána visszaállítani. Reprodukciós teszt. Fontos backup -nál.
Előtte érdemes megbizonyosodni hogy van-e elég tartalék a banxámlánkon. B-)
Válasz RudyD-nek: én már régóta használok egy ilyen szkriptet, akkor most közreadom:
#! /bin/sh
SPATH="/home/user/savedb"
SUSER=`/bin/date '+%Y%m%d'`".sql.gz"
MPASS="secret"
# ---
# A mysqldump opciói. Az egyebtűsek:
# -a: --create-options
# -B: --databases (ez szúrja be a "USE ..." parancsot is
# -c: --complete-insert
# -R: --routines
# ---
DOPTIONS="--skip-add-locks --add-drop-database --add-drop-table -a -B -c -i -R --compatible=mysql40"
DOPTIONS="$DOPTIONS --default-character-set=utf8 --set-charset"
mysqlshow -uroot -p${MPASS}|sed -e \
'1,3d;$d;1,$s/|//g;1,$s/ //g; /information_schema/d' \
-e "s!^.*\$!mysqldump -uroot -p${MPASS} ${DOPTIONS} &| gzip -9 >${SPATH}/&${SUSER}!" | bash
A megadott directory-ba minden adatbázisból külön fájlba csinál mentést.