Mysql
 sql >> Database >  >> RDS >> Mysql

Come eseguire il backup dei database MySQL dalla riga di comando in Linux

L'attuale evoluzione tecnologica di ogni aspetto della vita ha reso i dati più preziosi dell'oro e dell'argento. Se puoi acquisire, far crescere e proteggere i dati, sei a un passo dall'essere un dio dei dati. Tuttavia, le grandi aziende che controllano aspetti della vita come l'e-commerce, i carburanti, i trasporti e gli scenari alimentari si affidano alla protezione dei dati per proteggersi da un inevitabile collasso.

In questo momento, perdere dati è come perdere l'assicurazione sulla vita. Quindi il sistema di gestione del database che stai utilizzando dovrebbe avere un orientamento di backup. Se sei un amministratore MySQL o un utente che si occupa di dati in crescita, dovresti prendere in considerazione l'implementazione di un piano di automazione del backup più che frequente. Motivo? Potresti finire per essere vittima di un attacco informatico o addirittura alterare i tuoi dati per sbaglio.

Tali circostanze possono portare a violazioni dei dati implacabili, soprattutto quando non si dispone di un piano di backup del database. Se sei un utente o un amministratore MySQL investito, questo articolo è qui per risolvere i tuoi problemi di backup del database. Incontreremo due obiettivi. Innanzitutto, capirai l'implementazione dell'esportazione di database tramite "mysqldump". Quindi, infine, toccheremo come l'utilizzo di "crontab" può semplificare l'intero processo attraverso l'automazione.

Prepara una directory di backup dei dati

Poiché Linux non fornisce una raccomandazione all'utente per una destinazione di backup dei dati MySQL, spetta a te scegliere una posizione di backup adatta. Ad esempio, in questa guida tutorial, lavoreremo in una directory di backup in "/var/www_my_backups/". Stiamo considerando questo approccio solo per comprendere i meccanismi di backup dei dati MySQL. Idealmente, si consiglia di eseguire tutti i backup dei dati importanti su un server fuorigioco.

Puoi creare la tua directory di backup preferita sul tuo computer locale tramite un comando da terminale simile al seguente:

$ sudo mkdir /var/www_my_backups/

Assicurati che la macchina di backup gestita da Linux che stai utilizzando abbia privilegiato l'accesso come root o sudo. Se non hai l'accesso come proprietario alla directory di backup creata, dovrai affrontare errori di autorizzazione durante l'esecuzione dei test di mysqldump. Il comando seguente dovrebbe elencare l'utente di sistema attualmente attivo e i dettagli se si dispone dei privilegi di proprietà sulla cartella di backup creata.

$ sudo chown $(whoami):$(whoami) /var/www_my_backups/

L'utilità client mysqldump

Questo strumento MySQL esegue backup logici. Risulta in diversi set di istruzioni SQL, che ricreano i dati della tabella del database originale e le definizioni degli oggetti quando vengono eseguiti. Inoltre, viene eseguito il backup di uno o più dump del database MySQL o trasferiti a un server di database SQL secondario.

Un comando mysqldump standard è rappresentato dalla seguente sintassi del comando.

$ mysqldump -u [mysql_username] -p[mysql_password] [mysql_database_name] > /path/to/[mysql_dump_file_name].sql
  • -u [mysql_username]: rappresenta un utente privilegiato del database MySQL. Questo utente dovrebbe essere in grado di eseguire operazioni di dump del database.
  • -p[mysql_password]: rappresenta la password utente del database MySQL. Non aggiungere uno spazio tra “-p” e “[mysql_password]”.
  • [mysql_dump_file_name]: rappresenta il nome del tuo database MySQL.
  • >: punta alla destinazione del dump di output
  • /percorso/di/[mysql_dump_file_name].sql: punta al percorso del file di dump associato. Puoi assegnare a questo file dump [mysql_dump_file_name] un nome personalizzato, se lo desideri.

Prima di procedere con questa guida tutorial, c'è qualcosa che vale la pena menzionare su "-p[mysql_password]". Sebbene questa guida all'articolo si concentrerà sull'associazione del suo utilizzo con diversi esempi di dump MySQL, dovresti evitare di usarlo direttamente quando gestisci i tuoi dump di backup MySQL reali, specialmente in una rete condivisa.

Un dump in esecuzione può essere dirottato con un comando bidimensionale come "ps ax", rivelando il nome utente e la password del database associati. Tuttavia, l'utilizzo della posizione "~/.my.cnf" per memorizzare la password del database MySQL rende superfluo l'uso di "-p[mysql_password]" nel comando dump indicato. Se questo comando dump viene eseguito tramite un lavoro cron, l'opzione del comando “–defaults-extra-file=/path/to/.my.cnf” dovrebbe puntare il comando mysqldump alla posizione della password del database.

Alcuni esempi di backup del database MySQL

Consideriamo diversi scenari utente in cui possiamo utilizzare il comando mysqldump per eseguire il backup dei dati del database MySQL.

Backup di tutti i database

L'uso dell'opzione di comando "–all-databases" nel tuo comando mysqldump si prenderà cura di tutti i dump del database MySQL sul tuo sistema Linux. Ad esempio, il comando seguente mostra come eseguire il dump di tutti i database MySQL nel file "/var/www_my_backups/" già esistente. L'utente di questo sistema Linux deve essere root o disporre dei privilegi sudo.

Nel nostro caso, e per tua comprensione, abbiamo chiamato il nostro file di dump "all-databases.sql", ma puoi usare qualsiasi altro nome di tua preferenza. Dal momento che abbiamo a che fare con tutti i database, è necessario essere un utente di account MySQL root.

$ mysqldump -u root -p[mysql_password] --all-databases > /var/www_my_backups/all-databases.sql

Backup di un database

Se solo un database MySQL è importante per te, la creazione del backup con il comando mysqldump richiede la sostituzione dell'opzione del comando "[mysql_database]" con il nome effettivo. Il nome del file di dump può prendere il nome di questo database "[mysql_database].sql" in modo che diventi facile rintracciarlo e ripristinarlo in un secondo momento. Se lo desideri, puoi anche utilizzare un altro nome di file di dump personalizzato.

Questo comando di esempio viene implementato utilizzando l'utente root, ma qualsiasi altro utente con accesso al database di destinazione è un'opzione praticabile.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[mysql_database_name].sql

Backup di più database

Forse hai una selezione specifica di database MySQL di cui desideri eseguire il backup. In questo caso, l'opzione del comando "[mysql_database_name]" apparirà più di una volta e ogni caso è associato al nome del database di cui si desidera eseguire il backup. Ricorda di spaziare i nomi di questi database sul comando mysqldump. Il file di dump "[mysql_database_name].sql" dovrebbe anche essere associato a un nome univoco che ricorderai.

$ mysqldump -u root -p[mysql_password] [mysql_database_1_name] [mysql_database_2_name] > /var/www_my_backups/[mysql_databases_1_2_names].sql

Backup di una singola tabella

Quando la routine di backup è solo dopo una tabella di database specifica, la creazione del backup dovrebbe avere sia il nome del database che il nome della tabella del database come opzioni di comando del comando mysqldump. Puoi assegnare al tuo file dump lo stesso nome della tabella del database di destinazione, ad es. [nome_tabella_database_mysql].sql.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_name] > /var/www_my_backups/[mysql_databases_table_name].sql

Backup di più tabelle

Quando si desidera eseguire il backup di molte tabelle di database MySQL specifiche, una menzione di tutti i nomi delle tabelle del database selezionati dovrebbe venire dopo il nome del database che ospita queste tabelle. Il file di dump di destinazione potrebbe assumere un nome come [mysql_database_tables_1_2_names].sql

$ mysqldump -u root -p[mysql_password] [mysql_database_name] [mysql_database_table_1_name] [mysql_database_table_2_name] > /var/www_my_backups/[mysql_databases_tables_1_2_names].sql

Backup di uno o più database remoti

Anche questa implementazione di esempio è semplice. Il comando di dump del database MySQL dovrà includere l'opzione del comando "-h" seguita dal nome host della macchina remota o dall'indirizzo IP associato. Tutte le altre consuete sintassi dei comandi di backup del database dovrebbero quindi seguire.

$ mysqldump -h [remote_computer_ip_or_hostname] -u root -p[mysql_password] [mysql_database_name] > /var/www_my_backups/[remote_mysql_database_name].sql

È possibile modificare questo comando mysqldump per gestire gli altri casi di backup del database già discussi, ad esempio i backup MySQL con più database o tabelle.

Backup di un database associato alle compressioni

Se vuoi associare i backup dei tuoi dati alle compressioni, il pulsante “| gzip -c>” L'opzione del comando mysqldump può essere usata per inviare un output di gzip.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

Se il tuo database MySQL è enorme e desideri tenere traccia dell'avanzamento della compressione, considera sempre l'implementazione dell'opzione dettagliata come illustrato nell'esempio seguente.

$ mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c --verbose > /var/www_my_backups/[mysql_database_name].sql.gz

Ripristino del database MySQL

Una volta terminato il backup del database MySQL, cosa succede dopo? Come accedi ai dati che hai così accuratamente protetto? Il ripristino dei dati richiede l'adesione alla seguente sintassi di ripristino di MySQL.

$ mysql -u [mysql_username] -p[mysql_password] [mysql_database_name] < /path/to/[mysql_database_name].sql 

Come forse non avrai notato, l'unica differenza tra questo comando di ripristino del database e il comando di backup del database è che utilizziamo l'opzione "mysql" invece dell'opzione "mysqldump" e l'opzione "<" invece dell'opzione ">".

Automatizzazione dei backup MySQL

Il sistema operativo Linux è dotato di numerosi servizi utili che non hanno prezzo per un amministratore di database come quello sotto MySQL RDBMS. Uno di questi servizi è il servizio cron. È efficace nella pianificazione dei comandi automatizzati. Questi comandi, una volta creati, vengono assegnati alla tabella cron crontab. Puoi accedere a crontab tramite il seguente comando.

$ sudo crontab -e

Se richiesto, questo comando potrebbe voler associare la sua esecuzione a un editor di testo per selezionare l'editor di testo nano.

Si aprirà un file con un nome come “/tmp/crontab.LVY6A9/crontab”. Nella parte inferiore di questo file crontab, inserisci una pianificazione cron praticabile insieme a un comando di dump MySQL applicabile. L'esempio illustrato di seguito implementa l'uso della compressione gzip per i backup giornalieri del database. A volte potresti avere file .sql di grandi dimensioni programmati per il backup. L'uso di gzip riduce tali file a dimensioni ragionevoli prima dell'archiviazione di backup. Aiuta con la gestione della memoria di backup.

00 03 * * * mysqldump -u root -p[mysql_password] [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz

L'opzione di comando “00 03 ***” può essere interpretata nel modo seguente. Ogni 24 ore dopo le 3 del mattino, il comando mysqldump successivo viene eseguito per eseguire il backup di un database. Il file di backup del database attualmente esistente prima dell'avvio di questo processo di backup viene sovrascritto. Nel tuo caso, non è necessario attendere 24 ore per vedere in azione l'automazione del backup del database tramite crontab.

Puoi modificare l'opzione "00 03 ***" sul file crontab in qualcosa come "02 00 ***" e in soli due minuti il ​​processo di backup dovrebbe avviarsi automaticamente. In alternativa, se l'ora sono le 22:30, la modifica del file con "34 22 ***" inizializzerà il processo di backup del database alle 22:34. Ricordarsi di salvare (Ctrl+X) questo file crontab prima di chiuderlo affinché questo comando diventi eseguibile.

Trascorsi i minuti impostati, il lavoro cron dovrebbe essere stato eseguito. Quindi, elenca la cartella di backup creata sul tuo terminale e il file di backup .sql.gz creato dovrebbe essere presente.

$ ls -l /var/www_my_backups/

L'output risultante dovrebbe essere simile al seguente:

-rw-r--r-- 1 root root 36M Jul 29 22:24 [mysql_database_name].sql.gz

Se hai problemi a individuare il file di backup MySQL .sql.gz, rileggi il tuo tempo crontab o l'intero comando. Potrebbe esserci un errore di sintassi o potrebbe mancare qualcosa. In alternativa, il registro cron di sistema potrebbe puntare a un problema.

$ sudo grep CRON /var/log/syslog 

Ricordati di reimpostare la voce crontab sulla pianificazione del database preferita dopo aver confermato che tutto funziona correttamente.

Utilizzo di my.cnf per archiviare le password del database MySQL  

Abbiamo già menzionato gli svantaggi dell'opzione "-p[mysql_password]" su un comando mysqldump, specialmente in una rete condivisa. Dobbiamo discutere come implementare l'archiviazione delle password nel file "~/.my.cnf". Gli utenti che utilizzano cron per automatizzare i backup del database dovranno comprendere l'implementazione dell'opzione del comando “–defaults-extra-file=/path/to/.my.cnf”.

Modifica del file my.cnf

La directory home del tuo sistema Linux contiene questo file nascosto. Il percorso di sistema diretto ad esso è “/home/your_username/.my.cnf”. Usa l'editor di testo nano per aprire questo file. L'opzione "~" punta alla home directory.

$ sudo nano ~/.my.cnf

Modifica questo file aperto in base alla seguente sintassi per memorizzare correttamente la password del database MySQL. La parte "YOUR_DB_PASS" è l'unica voce che devi modificare con la tua password del database effettiva. Inserisci queste informazioni dettagliate nella parte inferiore del file e salvale.

[mysqldump] 
password=YOUR_DB_PASS

Usa Ctrl+X per salvare questo file. Anche questo file "my.cnf" necessita di alcune impostazioni di autorizzazione. Implementa il seguente comando:

$ sudo chmod 600 ~/.my.cnf

È giunto il momento di vedere la ricreazione del nostro nuovo comando mysqldump con l'opzione del comando "-p[mysql_password]" eliminata.

$ mysqldump -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

Come puoi vedere, non abbiamo aggiunto nulla. Sembra solo che l'unica cosa che abbiamo rimosso sia l'opzione di comando "-p[mysql_password]".

Crontab e –default-extrs-file

Per gli utenti che preferiscono automatizzare i backup del database, sarà necessario recuperare la password del database nel file "~/.my.cnf" tramite l'opzione del comando "–defaults-extra-file". Questo approccio semplifica le cose per il comando mysqldump quando è necessario fare riferimento all'utente del database e all'autenticità della password. Devi essere specifico sul percorso del file my.cnf e non usare solo il simbolo "~". Considera la seguente implementazione all'interno del file crontab:

30 22 * * *   mysqldump --defaults-extra-file=/home/system_username/.my.cnf -u root [mysql_database_name] | gzip -c > /var/www_my_backups/[mysql_database_name].sql.gz 

In questo esempio, crontab viene eseguito ogni giorno alle 22:30 per creare una compressione gzip di backup del database MySQL.

Nota finale

Questo articolo ha esaminato i meccanismi di backup del database locale sulla directory di backup "/var/www_my_backups". Dal momento che ora comprendi come avviene il processo di backup, dovresti aumentare la scalabilità e iniziare a pensare ai backup fuori sede. Tuttavia, un approccio più pratico è attraverso la configurazione dell'accesso SFTP che punta a questa directory di backup "/var/www_my_backups".

Con tale configurazione in atto, è possibile creare un cron job SFTP tramite un server remoto per recuperare una copia di questi file di database archiviati localmente per l'archiviazione assicurativa di notte e tutti i giorni.

Mentre concludiamo questa fantastica guida all'articolo, ora sei un orgoglioso maestro degli scenari di backup del database MySQL, del ripristino del backup del database e dell'automazione del backup del database. Ora dovresti fare un passo avanti e avere fiducia nell'utilizzo dei lavori cron per pianificare e gestire l'automazione del backup del database MySQL. I programmi di automazione non devono essere giornalieri in quanto possono essere anche settimanali e mensili.