MySQL: escludere dei database dal mysqldump

Mysqldump è un’utility che genera un file ASCII contentente istruzioni SQL (CREATE TABLE, CREATE DATABASE ecc.) che permettono di ricreare completamente un database. Questo metodo permette di utilizzare lo script su qualsiasi piattaforma, ottenendo quindi una soluzione portabile. La seconda importante caratteristica è la flessibilità, modificando lo script prodotto, è possibile il ripristino anche di una sola tabella. Infine mysqldump permette di effetture il dump di un database da remoto.

Esempio:

[root@vagante backup-db]# mysqldump arnaldoz > arnaldoz_dump_db.sql -u root -p  
Enter password: db3mendo  

In questo caso viene eseguito il dump del database arnaldoz generando le relative instruzioni nel file arnaldo_dump_db.sql. E’ necessario comunicare a mysqldump che si utilizzerà l’utente amministratore -u root con la relativa password -p

Mysqldump ha un’opzione per ignorare le tabelle specifiche. Quindi se avete 1.000 tabelle di un database, è possibile dire a mysqldump di salvare tutte le tabelle tranne alcune. Non esiste alcuna opzione per escludere uno o più database. Tuttavia, se si conosce il tool a linea di comando, la soluzione è facile:
In primo luogo, si ottiene l’elenco di tutti i database:

mysql -B -N -e 'show databases' information_schema employees five four mysql one performance_schema six test three two

-B forze modalità batch , mentre-N ottiene il risultato senza le intestazioni.
Ora, diciamo che vogliamo escludere database quattro, cinque e sei. E poiché vogliamo evitare spiacevoli effetti collaterali, anche INFORMATION_SCHEMA e performance_schema. Quindi, abbiamo condotto i dati precedenti attraverso un filtro. Io uso Perl, ma sed o grep avrebbero potuto fare lo stesso un buon lavoro.

mysql -B -N -e 'show databases' | \ perl -ne 'print unless /\b(?:four|five|six|_schema)\b/' dipendenti mysql one test three two

Ora che abbiamo l’elenco dei database di cui abbiamo bisogno, lo passiamo a mysqldump per il backup. Utilizzando xargs convertiamo la lista verticale in orizzontale.

mysql -B -N -e 'show databases' | \ perl -ne 'print unless /\b(?:four|five|six|_schema)\b/' \ xargs echo mysqldump -B mysqldump -B dipendenti mysql one test three two

Tutto qui. Una volta che siete sicuri che sia ciò che si desidera, rimuovere il “echo” dopo xargs, e il comando viene eseguito.

Fonte: openskill.info