Ö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

3 hozzászólás


  1. Helyesen: pipe-okkal, vagy szlengesen: pájpokkal. Csak hogy érthető legyen.


  2. 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-)


  3. 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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.