Včera jsem se zabýval základním použitím mysqldump pro zálohování databází MySQL. Dnes se podívám na to, jak použít mysqldump k výpisu dat z databáze MySQL do textových souborů CSV a souborů s tabulátorem namísto použití vkládacích dotazů SQL, což je výchozí metoda výpisu.
mysqldump -u -p -T/path/to/directory
Příznak -u slouží k určení uživatelského jména používaného pro připojení k databázovému serveru MySQL a vy byste část výše uvedeného příkladu nahradili svým uživatelským jménem.
Příznak -p označuje, že zadáte heslo pro připojení k databázi; budete k němu vyzváni, jakmile se příkaz začne provádět.
Příznak -T následovaný názvem adresáře označuje místo, kam bude MySQL zapisovat své soubory. Mezi příznakem -T a začátkem názvu adresáře může být mezera, nebo může být bez mezery: záleží na vás, protože obojí bude fungovat. Je důležité si uvědomit, že do zadaného adresáře musí být možné zapisovat uživatelem, pod kterým server MySQL běží. Pokud tomu tak není, zobrazí se tato chyba:
mysqldump: Got error: 1: Can't create/write to file '/path/to/filename.txt' (Errcode: 13) when executing 'SELECT INTO OUTFILE'
Pokud má váš počítač s Linuxem povolen SELinux, pak musí být adresář také povolen konfigurací SELinuxu, aby do něj mohla MySQL zapisovat.
Soubory vytvořené mysqldumpem
Podle výše uvedeného příkladu s databází, která má dvě tabulky s názvy „něco“ a „něco_jinak“, se vytvoří následující čtyři soubory:
- něco.sql – obsahuje SQL pro vytvoření tabulky. Ve výchozím nastavení obsahuje
DROP TABLE IF EXISTS `something`;
jako součást dotazu - něco.txt – data z tabulky „něco“ ve formátu s oddělením tabulátorů
- něco_jiného.sql – obsahuje SQL pro vytvoření tabulky. Ve výchozím nastavení obsahuje
DROP TABLE IF EXISTS `something_else`;
jako součást dotazu - něco_jiného.txt – data z tabulky „něco_jiného“ ve formátu s oddělovačem tabulek
Pokud nechcete *.sql soubory vytvářet, můžete do příkazu mysqldump přidat příznak -t takto:
mysqldump -u -p -t -T/path/to/directory
Všimněte si, že i když do zadaného adresáře nemůže server MySQL zapisovat, soubory *.sql soubory budou přesto vytvořeny; pouze textové soubory nemohou být vytvořeny.
Změna výstupního formátu
Ve výchozím nastavení příkaz mysqldump s příznakem -T vypíše data do souborů oddělených tabulátory. Je však možné změnit oddělovač a také určit, aby hodnoty polí byly obklopeny uvozovkami.
Pro změnu oddělovače použijte příznak --fields-terminated-by=
jako v následujícím příkladu. V tomto příkladu vypíšeme data do hodnot oddělených čárkou neboli CSV:
mysqldump -u -p -t -T/path/to/directory --fields-terminated-by=,
Pokud byste chtěli kolem každého pole umístit také uvozovky, použijte příznak --fields-enclosed-by=
. V příkladu níže je každé pole obklopeno uvozovkami. Všimněte si, že symbol uvozovek na příkazovém řádku musíme ukončit lomítkem.
mysqldump -u -p -t -T/path/to/directory --fields-enclosed-by=" --fields-terminated-by=,
Výsledný soubor by vypadal jako v následujícím příkladu:
.