Android

Hvordan sikkerhetskopiere og gjenopprette mysql-databaser med mysqldump

Backup i MYSQL Workbench 6.3

Backup i MYSQL Workbench 6.3

Innholdsfortegnelse:

Anonim

Denne opplæringen forklarer hvordan du sikkerhetskopierer og gjenoppretter MySQL- eller MariaDB-databaser fra kommandolinjen ved å bruke mysqldump-verktøyet.

Sikkerhetskopifilene opprettet av mysqldump-verktøyet er i utgangspunktet et sett med SQL-setninger som kan brukes til å gjenskape den opprinnelige databasen. Mysqldump-kommandoen kan også generere filer i CSV- og XML-format.

Du kan også bruke mysqldump-verktøyet til å overføre MySQL-databasen til en annen MySQL-server.

Mysqldump Command Syntax

Før du går inn på hvordan du bruker mysqldump-kommandoen, la oss begynne med å gå gjennom den grunnleggende syntaks.

Mysqldump-verktøyuttrykkene har følgende form:

mysqldump > file.sql

  • options - file.sql alternativet file.sql - dump-filen (backup)

For å bruke mysqldump-kommandoen må MySQL-serveren være tilgjengelig og kjører.

Sikkerhetskopier en enkelt MySQL-database

Det vanligste tilfellet med mysqldump-verktøyet er å ta sikkerhetskopi av en enkelt database.

For å lage en sikkerhetskopi av databasen som heter database_name ved hjelp av brukerroten og lagre den i en fil som heter database_name.sql kjører du følgende kommando:

mysqldump -u root -p database_name > database_name.sql

Du blir bedt om å oppgi root-passordet. Etter vellykket autentisering starter dump-prosessen. Avhengig av databasestørrelse kan prosessen ta litt tid.

mysqldump database_name > database_name.sql

Sikkerhetskopier flere MySQL-databaser

For å ta sikkerhetskopi av flere MySQL-databaser med en kommando, må du bruke alternativet - database etterfulgt av listen over databaser du vil sikkerhetskopiere. Hvert databasenavn må skilles med mellomrom.

mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql

Kommandoen over vil opprette en dump-fil som inneholder begge databasene.

Sikkerhetskopier alle MySQL-databaser

Bruk --all-databases for å sikkerhetskopiere alle MySQL-databaser:

mysqldump -u root -p --all-databases > all_databases.sql

Samme som med forrige eksempel vil kommandoen over opprette en enkelt dump-fil som inneholder alle databasene.

Sikkerhetskopier alle MySQL-databaser for å skille filer

mysqldump verktøyet gir ikke et alternativ for å ta sikkerhetskopi av alle databaser for å skille filer, men vi oppnår det enkelt med en enkel bash FOR loop:

for DB in $(mysql -e 'show databases' -s --skip-column-names); do mysqldump $DB > "$DB.sql"; done

Kommandoen over vil opprette en egen dump-fil for hver database ved å bruke databasenavnet som filnavn.

Opprett en komprimert MySQL-database-sikkerhetskopi

Hvis databasestørrelsen er veldig stor, er det lurt å komprimere utdataene. For å gjøre det, bare rør utdataene til gzip verktøyet, og omdirigér den til en fil som vist nedenfor:

mysqldump database_name | gzip > database_name.sql.gz

Lag en sikkerhetskopi med tidsstempel

mysqldump database_name > database_name-$(date +%Y%m%d).sql

Kommandoen over vil opprette en fil med følgende format database_name-20180617.sql

Gjenopprette en MySQL dump

Du kan gjenopprette en MySQL-dump ved hjelp av mysql verktøyet. Kommandoen generell syntaks er som følger:

mysqld database_name < file.sql

I de fleste tilfeller må du opprette en database for å importere til. Hvis databasen allerede eksisterer, må du først slette den.

I det følgende eksemplet vil den første kommandoen opprette en database som heter database_name og deretter importere dump database_name.sql til den:

mysql -u root -p -e "create database database_name"; mysql -u root -p database_name < database_name.sql

Gjenopprett en enkelt MySQL-database fra en full MySQL-dump

mysql --one-database database_name < all_databases.sql

Eksporter og importer en MySQL-database i én kommando

I stedet for å opprette en dump-fil fra en database og deretter importere sikkerhetskopien til en annen MySQL-database, kan du bruke følgende one-liner:

mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name

Kommandoen over vil pipe utdataene til en mysql-klient på den eksterne verten, og den vil importere den til en database med navnet remote_database_name . Før du kjører kommandoen, må du forsikre deg om at databasen allerede eksisterer på den eksterne serveren.

Automatiser sikkerhetskopier med Cron

Å automatisere prosessen med å sikkerhetskopiere databasene er så enkelt som å lage en cron-jobb som vil kjøre mysqldump-kommandoen til angitt tidspunkt.

Følg trinnene nedenfor for å konfigurere automatiserte sikkerhetskopier av en MySQL-database ved hjelp av cronjob:

  1. Lag en fil som heter .my.cnf i brukerkatalogen for brukeren:

    sudo nano ~/.my.cnf

    Kopier og lim inn følgende tekst i.my.cnf-filen.

    user = dbuser password = dbpasswd

    Ikke glem å erstatte dbuser og dbpasswd med databasebrukeren og brukerens passord.

    Begrens tillatelser til legitimasjonsfilen slik at bare brukeren din har tilgang til den:

    chmod 600 ~/.my.cnf

    Lag en katalog for å lagre sikkerhetskopiene:

    mkdir ~/db_backups

    Åpne crontab-filen din:

    crontab -e

    Legg til følgende cron-jobb som vil opprette en sikkerhetskopi av et databasenavn mydb hver dag kl.

    0 3 * * * /usr/bin/mysqldump -u dbuser mydb > /home/username/db_backups/mydb-$(date +%Y%m%d).sql

    Ikke glem å erstatte username med det faktiske brukernavnet.

Du kan også opprette en annen cronjob for å slette sikkerhetskopier som er eldre enn 30 dager:

find /path/to/backups -type f -name "*.sql" -mtime +30 -delete

Selvfølgelig må du justere kommandoen i henhold til sikkerhetskopisplassering og filnavn. For å lære mer om finnkommandoen, sjekk vår Hvordan finne filer i Linux ved å bruke kommandolinjeguiden.

Konklusjon

Denne opplæringen dekker bare det grunnleggende, men det skal være en god start for alle som ønsker å lære å lage og gjenopprette MySQL-databaser fra kommandolinjen ved hjelp av mysqldump-verktøyet.

Du kan også sjekke opplæringen om hvordan du tilbakestiller et MySQL root-passord i tilfelle du har glemt det.

mysql mariadb backup mysqldump