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

Sådan sikkerhedskopieres MySQL-databaser fra kommandolinjen i Linux

Den nuværende teknologiske udvikling af alle aspekter af livet har gjort data mere værdifulde end guld og sølv. Hvis du kan erhverve, vokse og beskytte data, er du et skridt væk fra at være en datagud. Alligevel er store virksomheder, der kontrollerer livsaspekter som e-handel, brændstof, transport og fødevarelandskaber, afhængige af databeskyttelse for at beskytte sig mod et uundgåeligt sammenbrud.

Lige nu er det at miste data som at miste din livsforsikring. Så det databasestyringssystem, du bruger, bør have en backup-orientering. Hvis du er en MySQL-administrator eller en bruger, der beskæftiger dig med voksende data, bør du overveje at implementere en mere end hyppig backup-automatiseringsplan. Grund? Du kan ende med at blive offer for et datahack eller endda ændre dine data ved et uheld.

Sådanne omstændigheder kan føre til utilgivelige databrud, især når du ikke har en database backup plan. Hvis du er en investeret MySQL-bruger eller -administrator, er denne artikel her for at løse dine bekymringer om databasesikkerhedskopiering. Vi vil opfylde to mål. Først vil du forstå implementeringen af ​​​​eksport af databaser gennem "mysqldump". Så vil vi endelig komme ind på, hvordan brugen af ​​"crontab" kan gøre hele denne proces lettere gennem automatisering.

Forbered en mappe til sikkerhedskopiering af data

Da Linux ikke laver en brugeranbefaling til en MySQL-databackupdestination, er det op til dig at vælge en passende backupplacering. For eksempel, i denne vejledning, vil vi arbejde under en backup-mappe i "/var/www_my_backups/". Vi overvejer kun denne tilgang for at forstå MySQL-datasikkerhedskopieringsmekanismer. Ideelt set anbefales det at sikkerhedskopiere alle vigtige data på en offside-server.

Du kan oprette din foretrukne backup-mappe på din lokale maskine gennem en terminalkommando, der ligner følgende:

$ sudo mkdir /var/www_my_backups/

Sørg for, at den Linux-drevne backup-maskine, du bruger, har privilegeret dig med root-adgang eller sudo-rettigheder. Hvis du ikke har ejeradgang til den oprettede backup-mappe, vil du stå over for tilladelsesfejl, mens du kører mysqldump-tests. Følgende kommando bør vise den aktuelt aktive systembruger og detaljer, hvis du har ejerskabsrettigheder på den oprettede backup-mappe.

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

Mysqldump-klientværktøjet

Dette MySQL-værktøj udfører logiske sikkerhedskopier. Det resulterer i flere SQL-sætningssæt, som genskaber de originale databasetabeldata og objektdefinitioner, når de udføres. Derudover sikkerhedskopieres en eller flere MySQL-databasedumps eller overføres til en sekundær SQL-databaseserver.

En standard mysqldump-kommando er repræsenteret af følgende kommandosyntaks.

$ mysqldump -u [mysql_brugernavn] -p[mysql_adgangskode] [mysql_database_name]> /sti/til/[mysql_dump_filnavn].sql
  • -u [mysql_brugernavn]: repræsenterer en privilegeret bruger af MySQL-databasen. Denne bruger bør være i stand til at udføre database dump-operationer.
  • -p[mysql_adgangskode]: repræsenterer brugeradgangskoden til MySQL-databasen. Tilføj ikke et mellemrum mellem "-p" og "[mysql_adgangskode]".
  • [mysql_dump_file_name]: repræsenterer navnet på din MySQL-database.
  • >: peger på destinationen for outputdumpen
  • /sti/to/[mysql_dump_file_name].sql: peger på stien til den tilknyttede dump-fil. Du kan give denne dump-fil [mysql_dump_file_name] et brugerdefineret navn, hvis du vil.

Før vi fortsætter med denne vejledning, er der noget, der er værd at nævne om "-p[mysql_password]". Selvom denne artikelvejledning vil fokusere på at forbinde dens brug med flere MySQL-dump-eksempler, bør du undgå at bruge den direkte, når du håndterer dine rigtige MySQL-backup-dumps, især i et delt netværk.

En kørende dump kan kapres med en todimensionel kommando som "ps axe", der afslører det tilknyttede databasebrugernavn og adgangskode. Brug af placeringen "~/.my.cnf" til at gemme din MySQL-database adgangskode gør brugen af ​​"-p[mysql_password]" i den angivne dump-kommando unødvendig. Hvis denne dump-kommando udføres gennem et cron-job, skal kommandomuligheden “–defaults-extra-file=/path/to/.my.cnf” pege mysqldump-kommandoen til placeringen af ​​databaseadgangskoden.

Nogle eksempler på sikkerhedskopiering af MySQL-database

Lad os overveje flere brugerscenarier, hvor vi kan bruge mysqldump-kommandoen til at sikkerhedskopiere MySQL-databasedata.

Sikkerhedskopiering af alle databaser

Brug af kommandomuligheden “–all-databases” i din mysqldump-kommando vil tage sig af alle MySQL-databasedumps på dit Linux-system. For eksempel demonstrerer følgende kommando, hvordan du dumper alle dine MySQL-databaser til den allerede eksisterende "/var/www_my_backups/"-fil. Brugeren af ​​dette Linux-system skal være root eller have sudo-rettigheder.

I vores tilfælde, og for din forståelse, kaldte vi vores dump-fil "all-databases.sql", men du kan bruge et hvilket som helst andet navn, du foretrækker. Da vi har at gøre med alle databaser, er det nødvendigt at være en root MySQL-kontobruger.

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

Sikkerhedskopiering af én database

Hvis kun én MySQL-database er vigtig for dig, kræver oprettelse af dens sikkerhedskopi med mysqldump-kommandoen udskiftning af "[mysql_database]"-kommandoindstillingen med det faktiske navn. Dump-filnavnet kan tage navnet på denne database "[mysql_database].sql", så det bliver nemt at spore og gendanne den senere. Du kan også gå med et andet brugerdefineret dump-filnavn, hvis du ønsker det.

Denne eksempelkommando implementeres ved hjælp af root-brugeren, men enhver anden bruger med adgang til den målrettede database er en levedygtig mulighed.

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

Sikkerhedskopiering af flere databaser

Måske har du et specifikt udvalg af MySQL-databaser, som du ønsker at tage backup af. I dette tilfælde vil kommandoen "[mysql_database_name]" dukke op mere end én gang, og hvert tilfælde er forbundet med navnet på den database, du ønsker at sikkerhedskopiere. Husk at placere disse databases navne på mysqldump-kommandoen. Dumpfilen "[mysql_database_name].sql" bør også være forbundet med et unikt navn, som du vil huske.

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

Sikkerhedskopiering af en enkelt tabel

Når din backuprutine kun er efter en specifik databasetabel, skal oprettelsen af ​​dens backup have både databasenavnet og databasetabelnavnet som kommandomuligheder for mysqldump-kommandoen. Du kan give din dumpfil samme navn som den målrettede databasetabel, f.eks. [mysql_database_table_name].sql.

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

Sikkerhedskopiering af flere tabeller

Når du ønsker at sikkerhedskopiere mange specifikke MySQL-databasetabeller, skal en omtale af alle dine valgte databasetabelnavne komme efter databasenavnet, der er vært for disse tabeller. Den målrettede dumpfil kunne have et navn som [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]. 

Sikkerhedskopiering af en eller flere fjerndatabaser

Dette eksempelimplementering er også ligetil. MySQL-databasedump-kommandoen skal inkludere kommandoindstillingen "-h" efterfulgt af fjernmaskinens værtsnavn eller tilknyttede IP-adresse. Alle de andre sædvanlige kommandosyntakser for databasebackup bør derefter følge.

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

Du kan justere denne mysqldump-kommando til at håndtere de andre databasesikkerhedskopier, der allerede er diskuteret, f.eks. MySQL-sikkerhedskopier med flere databaser eller tabeller.

Sikkerhedskopiering af en database forbundet med komprimeringer

Hvis du vil knytte dine datasikkerhedskopier til komprimeringer, skal "| gzip -c>” mysqldump kommandoindstilling kan bruges til at pipe et gzip output.

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

Hvis din MySQL-database er enorm, og du vil holde styr på komprimeringens fremskridt, skal du altid overveje at implementere den detaljerede mulighed som vist i det følgende eksempel.

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

Gendannelse af MySQL-database

Når du er færdig med din MySQL database backup, hvad så? Hvordan får du adgang til de data, som du så omhyggeligt sikrede? Gendannelse af dine data kræver overholdelse af følgende MySQL-gendannelsessyntaks.

$ mysql -u [mysql_brugernavn] -p[mysql_adgangskode] [mysql_databasenavn]  

Som du måske ikke har bemærket, er den eneste forskel mellem denne databasegendannelseskommando og kommandoen til databasesikkerhedskopi, at vi bruger "mysql"-indstillingen i stedet for "mysqldump"-indstillingen og "<"-indstillingen i stedet for ">"-indstillingen.

Automatisk MySQL-sikkerhedskopi

Linux-operativsystemet er udstyret med flere nyttige tjenester, der er uvurderlige for en databaseadministrator som den under MySQL RDBMS. En af disse tjenester er cron-tjenesten. Det er effektivt til at planlægge automatiserede kommandoer. Disse kommandoer, når de er oprettet, allokeres til crontab cron-tabellen. Du kan få adgang til crontab gennem følgende kommando.

$ sudo crontab -e

Hvis du bliver bedt om det, vil denne kommando muligvis knytte dens udførelse til en teksteditor for at vælge nanoteksteditoren.

En fil med et navn som "/tmp/crontab.LVY6A9/crontab" åbnes. Nederst i denne crontab-fil skal du indtaste en levedygtig cron-tidsplan sammen med en anvendelig MySQL-dump-kommando. Eksemplet illustreret nedenfor implementerer brugen af ​​gzip-komprimering til daglige database backups. Nogle gange kan du have store .sql-filer planlagt til sikkerhedskopiering. Brug af gzip reducerer sådanne filer til rimelige størrelser før sikkerhedskopiering. Det hjælper med backup-hukommelseshåndtering.

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

Kommandomuligheden "00 03 ***" kan fortolkes på følgende måde. Hver 24. time efter kl. 03.00 udføres den efterfølgende mysqldump-kommando for at sikkerhedskopiere en database. Databasesikkerhedskopieringsfilen, der i øjeblikket eksisterede før påbegyndelsen af ​​denne sikkerhedskopieringsproces, overskrives. I dit tilfælde behøver du ikke vente efter 24 timer for at se din databasesikkerhedskopieringsautomatisering i aktion via crontab.

Du kan redigere "00 03 ***"-indstillingen på crontab-filen til noget i retning af "02 00 ***", og på kun to minutter bør backup-processen selv-initialiseres. Alternativt, hvis din tid er 22:30, vil redigering af filen med "34 22 ***" initialisere database backup-processen kl. 22:34. Husk at gemme (Ctrl+X) denne crontab-fil, før du lukker den, for at denne kommando bliver eksekverbar.

Når de minutter, du indstiller, er gået, skulle cron-jobbet være blevet udført. Angiv derefter den oprettede backup-mappe på din terminal, og den oprettede .sql.gz backup-fil skulle være til stede.

$ ls -l /var/www_my_backups/

Det resulterende output skal ligne følgende:

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

Hvis du har problemer med at finde .sql.gz MySQL backup-filen, skal du læse korrektur på din crontab-tid eller hele kommandoen. Der kan være en syntaksfejl, eller der kan mangle noget. Alternativt kan systemets cron-log pege på, hvor der er et problem.

$ sudo grep CRON /var/log/syslog 

Husk at nulstille crontab-indgangen til din foretrukne databasetidsplan, når du har bekræftet, at alt fungerer korrekt.

Brug af my.cnf til at gemme MySQL-databaseadgangskoder  

Vi har allerede nævnt ulemperne ved "-p[mysql_password]"-indstillingen på en mysqldump-kommando, især under et delt netværk. Vi skal diskutere, hvordan man implementerer adgangskodelagring i filen "~/.my.cnf". Brugere, der bruger cron til at automatisere deres databasesikkerhedskopier, skal forstå implementeringen af ​​kommandoen “–defaults-extra-file=/path/to/.my.cnf”.

Redigering af my.cnf-fil

Hjemmebiblioteket på dit Linux-system indeholder denne skjulte fil. Den direkte systemsti til den er "/home/dit_brugernavn/.my.cnf". Brug nano-teksteditoren til at åbne denne fil. Indstillingen "~" peger på hjemmebiblioteket.

$ sudo nano ~/.my.cnf

Rediger denne åbne fil i henhold til følgende syntaks for at gemme din MySQL-database adgangskode. Delen "DIN_DB_PASS" er den eneste post, du skal ændre med din faktiske databaseadgangskode. Indtast disse oplysninger nederst i filen, og gem dem.

[mysqldump] 
password=DIN_DB_PASS

Brug Ctrl+X for at gemme denne fil. Denne "my.cnf"-fil har også brug for nogle tilladelsesindstillinger. Implementer følgende kommando:

$ sudo chmod 600 ~/.my.cnf

Det er nu tid til at se genskabelsen af ​​vores nye mysqldump-kommando med kommandoen "-p[mysql_password]" fjernet.

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

Som du kan se, tilføjede vi ikke noget. Det ser kun ud til, at det eneste, vi fjernede, er kommandomuligheden "-p[mysql_password]".

Crontab og –defaults-extrs-fil

For brugere, der foretrækker at automatisere databasesikkerhedskopiering, bliver du nødt til at hente databaseadgangskoden i filen "~/.my.cnf" gennem kommandoen "–defaults-extra-file". Denne tilgang gør det nemt for mysqldump-kommandoen, når den skal referere til databasebrugerens og adgangskodens ægthed. Du skal være specifik med hensyn til stien til my.cnf-filen og ikke kun bruge "~"-symbolet. Overvej følgende implementering i crontab-filen:

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 

I dette eksempel udføres crontab hver dag kl. 22:30 for at skabe en sikkerhedskopieret gzip-komprimering af MySQL-databasen.

Sidste bemærkning

Denne artikel kiggede på lokale databasesikkerhedskopieringsmekanismer om "/var/www_my_backups" sikkerhedskopieringsmappen. Da du nu forstår, hvordan backup-processen foregår, bør du skalere højere og begynde at tænke på offsite backups. En mere praktisk tilgang er dog gennem SFTP-adgangskonfiguration, der peger på denne "/var/www_my_backups" backup-mappe.

Med en sådan konfiguration på plads er det muligt at oprette et SFTP-cron-job gennem en fjernserver for at hente en kopi af disse lokalt lagrede databasefiler til forsikringsopbevaring om natten og dagligt.

Når vi afslutter denne fantastiske artikelguide, er du nu en stolt mester i MySQL-databasesikkerhedskopieringsscenarier, gendannelse af databasesikkerhedskopiering og automatisering af databasesikkerhedskopiering. Du bør nu springe af tro og være sikker på at bruge cron-job til at planlægge og håndtere din MySQL-databasesikkerhedskopieringsautomatisering. Automatiseringsplanerne behøver ikke at være daglige, da de også kan være ugentlige og månedlige.


  1. Liste alle sekvenser i en Postgres db 8.1 med SQL

  2. Android:SQLite gemmer streng array?

  3. Hvilken datatype skal bruges til hashed kodeordsfelt og hvilken længde?

  4. Er der en PostgreSQL-ækvivalent til SQL Server-profiler?