Tegnap a mysqldump alapvető használatát vizsgáltam a MySQL-adatbázisok biztonsági mentéséhez. Ma azt fogom megnézni, hogyan használhatjuk a mysqldumpot a MySQL adatbázis adatainak CSV és tabulátorral elválasztott szövegfájlokba történő dumpolására, ahelyett, hogy SQL beszúrási lekérdezéseket használnánk, ami az alapértelmezett dumpolási módszer.
mysqldump -u -p -T/path/to/directory
A -u flag a MySQL adatbázis szerverhez való csatlakozáshoz használt felhasználónév megadására szolgál, és a fenti példa részét a saját felhasználónevünkkel kell helyettesíteni.
A -p jelző azt jelzi, hogy az adatbázishoz való csatlakozáshoz jelszót kell megadni; a parancs végrehajtásának megkezdésekor a rendszer kérni fogja a jelszót.
A -T jelzőt követi a könyvtár neve, ahová a MySQL a fájljait írni fogja. A -T és a könyvtárnév eleje között lehet szóköz, vagy szóköz nélkül is: rajtad múlik, mert mindkettő működik. Fontos megjegyezni, hogy a megadott könyvtárnak írhatónak kell lennie a MySQL szerver által használt felhasználó számára. Ha nem az, akkor egy ehhez hasonló hibát fog kapni:
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Ha a Linux gépén engedélyezve van a SELinux, akkor a könyvtárat a SELinux konfigurációnak is engedélyeznie kell, hogy a MySQL írhasson bele.
A mysqldump által létrehozott fájlok
A fenti példát használva, egy olyan adatbázis esetén, amelynek két táblája van “valami” és “valami_más”, négy fájl jön létre a következőképpen:
- something.sql – tartalmazza a tábla létrehozásához szükséges SQL-tartalmat. Alapértelmezés szerint a lekérdezés részeként tartalmazza a
DROP TABLE IF EXISTS `something`;
- something.txt – a “something” tábla adatai tabulátorral elválasztott formátumban
- something_else.sql – tartalmazza a tábla létrehozásához szükséges SQL-et. Alapértelmezés szerint
DROP TABLE IF EXISTS `something_else`;
szerepel benne a lekérdezés részeként - something_else.txt – a “valami_else” tábla adatai tabulátorral elválasztott formátumban
Ha nem szeretné, hogy a *.sql fájlokat létrehozni, akkor a mysqldump parancshoz hozzáadhatja a -t jelzőt a következőképpen:
mysqldump -u -p -t -T/path/to/directory
Megjegyezzük, hogy még ha a megadott könyvtárba nem is tud írni a MySQL szerver, a *.sql fájlok akkor is létrejönnek; csak a szöveges fájlok nem hozhatók létre.
A kimeneti formátum módosítása
A mysqldump a -T jelzővel alapértelmezés szerint tabulátorral elválasztott fájlokba tölti ki az adatokat. Meg lehet azonban változtatni az elválasztójelet, és azt is meg lehet adni, hogy idézőjelek vegyék körül a mezőértékeket.
Az elválasztójel megváltoztatásához használja a --fields-terminated-by=
jelzőt, mint a következő példában. Ebben a példában az adatokat vesszővel elválasztott értékekbe vagy CSV-be fogjuk kiüríteni:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
Ha azt is szeretné, hogy az egyes mezők körül is idézőjelek legyenek, akkor használja a --fields-enclosed-by=
flaget. Az alábbi példában minden mezőt idézőjelek vesznek körül. Vegye figyelembe, hogy a parancssorban az idézőjelet egy slash-szel kell kikerülnünk.
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
A kapott fájl a következő példa szerint nézne ki: