Android

Säkerhetskopiera och återställa mysql-databaser med mysqldump

MySQL Export Database using Command Line (mysqldump)

MySQL Export Database using Command Line (mysqldump)

Innehållsförteckning:

Anonim

Denna handledning förklarar hur du säkerhetskopierar och återställer MySQL- eller MariaDB-databaser från kommandoraden med hjälp av mysqldump-verktyget.

Säkerhetskopieringsfilerna som skapats av mysqldump-verktyget är i princip en uppsättning SQL-satser som kan användas för att återskapa den ursprungliga databasen. Mysqldump-kommandot kan också generera filer i CSV- och XML-format.

Du kan också använda mysqldump-verktyget för att överföra din MySQL-databas till en annan MySQL-server.

Mysqldump Command Syntax

Innan vi går in på hur man använder kommandot mysqldump, låt oss börja med att granska grundsyntaxen.

Mysqldump verktygsuttryck har följande form:

mysqldump > file.sql

  • options - Mysqldump-alternativet file.sql - dumpningsfilen (backup)

För att använda kommandot mysqldump måste MySQL-servern vara tillgänglig och kör.

Säkerhetskopiera en enda MySQL-databas

Det vanligaste fallet med mysqldump-verktyget är att säkerhetskopiera en enda databas.

Till exempel, för att skapa en säkerhetskopia av databasen som heter database_name med användarroten och spara den i en fil med namnet database_name.sql kör du följande kommando:

mysqldump -u root -p database_name > database_name.sql

Du blir ombedd att ange root-lösenordet. Efter framgångsrik autentisering startar dumpningsprocessen. Beroende på databasstorlek kan processen ta lite tid.

mysqldump database_name > database_name.sql

Säkerhetskopiera flera MySQL-databaser

För att säkerhetskopiera flera MySQL-databaser med ett kommando måste du använda alternativet - --database följt av listan över databaser som du vill säkerhetskopiera. Varje databasnamn måste separeras med mellanslag.

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

Kommandot ovan skapar en dumpfil som innehåller båda databaserna.

Säkerhetskopiera alla MySQL-databaser

Använd alternativet - alla --all-databases att säkerhetskopiera alla MySQL-databaser:

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

Samma som med föregående exempel skapar kommandot ovan en enda dumpningsfil som innehåller alla databaser.

Säkerhetskopiera alla MySQL-databaser för att separera filer

mysqldump verktyget ger inget alternativ att säkerhetskopiera alla databaser för att separera filer, men vi uppnå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

Kommandot ovan skapar en separat dumpfil för varje databas med databasnamnet som filnamn.

Skapa en komprimerad MySQL-databasbackup

Om databasstorleken är mycket stor är det en bra idé att komprimera utgången. För att göra det, rör bara utdata till gzip verktyget och omdirigera den till en fil som visas nedan:

mysqldump database_name | gzip > database_name.sql.gz

Skapa en säkerhetskopia med tidsstämpel

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

Kommandot ovan skapar en fil med följande format database_name-20180617.sql

Återställa en MySQL-dump

Du kan återställa en MySQL-dumpning med hjälp av mysql verktyget. Kommandot allmän syntax är som följer:

mysqld database_name < file.sql

I de flesta fall måste du skapa en databas att importera till. Om databasen redan finns måste du först ta bort den.

I följande exempel skapar det första kommandot en databas som heter database_name och sedan importerar dumpad database_name.sql till den:

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

Återställ en enda MySQL-databas från en fullständig MySQL-dump

mysql --one-database database_name < all_databases.sql

Exportera och importera en MySQL-databas i ett kommando

Istället för att skapa en dump-fil från en databas och sedan importera säkerhetskopian till en annan MySQL-databas kan du använda följande one-liner:

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

Kommandot ovan kommer att leda utdata till en mysql-klient på fjärrvärden och importera den till en databas med namnet remote_database_name . Innan du kör kommandot, se till att databasen redan finns på fjärrservern.

Automatisera säkerhetskopior med Cron

Automatisering av säkerhetskopieringen av databaserna är lika enkelt som att skapa ett cron-jobb som kommer att köra mysqldump-kommandot vid en viss tidpunkt.

Följ stegen nedan för att ställa in automatiska säkerhetskopior av en MySQL-databas med cronjob:

  1. Skapa en fil med namnet .my.cnf i din användarkatalog:

    sudo nano ~/.my.cnf

    Kopiera och klistra in följande text i filen.my.cnf.

    user = dbuser password = dbpasswd

    Glöm inte att ersätta dbuser och dbpasswd med databasanvändaren och användarens lösenord.

    Begränsa behörigheterna för referensfilen så att bara din användare har åtkomst till den:

    chmod 600 ~/.my.cnf

    Skapa en katalog för att lagra säkerhetskopiorna:

    mkdir ~/db_backups

    Öppna din crontab-fil för användare:

    crontab -e

    Lägg till följande cron-jobb som skapar en säkerhetskopia av ett databasnamn mydb varje dag kl. 3:

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

    Glöm inte att byta ut username med ditt faktiska användarnamn.

Du kan också skapa en annan cronjob för att ta bort alla säkerhetskopior som är äldre än 30 dagar:

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

Naturligtvis måste du justera kommandot enligt din säkerhetsplats och filnamn. För att lära dig mer om sökkommandot, kolla i Hur du hittar filer i Linux med hjälp av kommandoradsguiden.

Slutsats

Denna handledning täcker bara grunderna, men det bör vara en bra start för alla som vill lära sig att skapa och återställa MySQL-databaser från kommandoraden med hjälp av mysqldump-verktyget.

Du kan också kontrollera handledning om hur du återställer ett MySQL-root-lösenord om du har glömt det.

mysql mariadb säkerhetskopiering mysqldump