sql >> Database >  >> RDS >> Mysql

Een back-up maken van MySQL-databases vanaf de opdrachtregel in Linux

De huidige technologische evolutie van elk aspect van het leven heeft data kostbaarder gemaakt dan goud en zilver. Als u gegevens kunt verkrijgen, laten groeien en beschermen, bent u één stap verwijderd van een gegevensgod te zijn. Toch vertrouwen grote bedrijven die levensaspecten zoals e-commerce, brandstof, transport en voedsellandschappen beheersen op gegevensbescherming om zichzelf te beschermen tegen een onvermijdelijke ineenstorting.

Op dit moment is het verliezen van gegevens hetzelfde als het verliezen van uw levensverzekering. Het databasebeheersysteem dat u gebruikt, moet dus een back-uporiëntatie hebben. Als u een MySQL-beheerder bent of een gebruiker die te maken heeft met groeiende gegevens, kunt u overwegen een meer dan frequent automatiseringsplan voor back-ups te implementeren. Reden? U kunt het slachtoffer worden van een datahack of zelfs uw gegevens per ongeluk wijzigen.

Dergelijke omstandigheden kunnen leiden tot meedogenloze datalekken, vooral als u geen back-upplan voor de database heeft. Als u een ervaren MySQL-gebruiker of -beheerder bent, is dit artikel hier om uw zorgen over databaseback-ups op te lossen. We zullen twee doelen bereiken. Ten eerste begrijpt u de implementatie van het exporteren van databases via "mysqldump". Dan, ten slotte, zullen we ingaan op hoe het gebruik van "crontab" dit hele proces gemakkelijker kan maken door middel van automatisering.

Maak een back-upmap voor gegevens

Aangezien Linux geen gebruikersaanbeveling doet voor een MySQL-gegevensback-upbestemming, is het aan u om een ​​geschikte back-uplocatie te kiezen. In deze zelfstudiegids werken we bijvoorbeeld onder een back-upmap in "/var/www_my_backups/". We overwegen deze benadering alleen om de back-upmechanismen van MySQL-gegevens te begrijpen. In het ideale geval wordt aanbevolen dat alle belangrijke gegevensback-ups op een buitenspelserver plaatsvinden.

U kunt uw favoriete back-upmap op uw lokale computer maken via een terminalopdracht die lijkt op het volgende:

$ sudo mkdir /var/www_my_backups/

Zorg ervoor dat de door Linux bediende back-upmachine die u gebruikt u privileges heeft met root-toegang of sudo-privileges. Als u geen eigenaarstoegang hebt tot de gemaakte back-upmap, krijgt u te maken met machtigingsfouten tijdens het uitvoeren van mysqldump-tests. De volgende opdracht zou de momenteel actieve systeemgebruiker moeten vermelden en aangeven of u eigendomsrechten heeft voor de gemaakte back-upmap.

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

Het mysqldump-clienthulpprogramma

Deze MySQL-tool maakt logische back-ups. Het resulteert in verschillende sets van SQL-statements, die bij uitvoering de oorspronkelijke databasetabelgegevens en objectdefinities opnieuw creëren. Bovendien worden een of meerdere MySQL-databasedumps geback-upt of overgebracht naar een secundaire SQL-databaseserver.

Een standaard mysqldump-opdracht wordt weergegeven door de volgende opdrachtsyntaxis.

$ mysqldump -u [mysql_username] -p[mysql_password] [mysql_database_name] > /path/to/[mysql_dump_file_name].sql
  • -u [mysql_username]: vertegenwoordigt een bevoorrechte gebruiker van de MySQL-database. Deze gebruiker zou in staat moeten zijn om database dump operaties uit te voeren.
  • -p[mysql_password]: vertegenwoordigt het gebruikerswachtwoord van de MySQL-database. Voeg geen spatie toe tussen “-p” en “[mysql_password]”.
  • [mysql_dump_file_name]: staat voor de naam van uw MySQL-database.
  • >: wijst naar de bestemming van de uitvoerdump
  • /pad/naar/[mysql_dump_file_name].sql: verwijst naar de padlocatie van het bijbehorende dumpbestand. Je kunt dit dumpbestand [mysql_dump_file_name] een aangepaste naam geven als je wilt.

Voordat we verder gaan met deze handleiding, is er iets dat het vermelden waard is over "-p[mysql_password]". Hoewel deze artikelgids zich richt op het associëren van het gebruik ervan met verschillende MySQL-dumpvoorbeelden, moet u vermijden om het rechtstreeks te gebruiken bij het verwerken van uw echte MySQL-back-updumps, vooral in een gedeeld netwerk.

Een actieve dump kan worden gekaapt met een tweedimensionaal commando zoals 'ps ax', waarbij de bijbehorende gebruikersnaam en het wachtwoord voor de database worden onthuld. Als u echter de locatie "~/.my.cnf" gebruikt om uw MySQL-databasewachtwoord op te slaan, maakt u het gebruik van "-p[mysql_password]" in het opgegeven dump-commando overbodig. Als deze dump-opdracht wordt uitgevoerd via een cron-taak, moet de opdrachtoptie “–defaults-extra-file=/path/to/.my.cnf” de opdracht mysqldump naar de locatie van het databasewachtwoord verwijzen.

Enkele back-upvoorbeelden van MySQL-database

Laten we eens kijken naar verschillende gebruikersscenario's waarin we de opdracht mysqldump kunnen gebruiken om een ​​back-up te maken van MySQL-databasegegevens.

Back-up maken van alle databases

Als u de opdrachtoptie "–all-databases" in uw mysqldump-opdracht gebruikt, zorgt u voor alle MySQL-databasedumps op uw Linux-systeem. De volgende opdracht laat bijvoorbeeld zien hoe u al uw MySQL-databases naar het reeds bestaande bestand "/var/www_my_backups/" kunt dumpen. De gebruiker van dit Linux-systeem moet root zijn of sudo-rechten hebben.

In ons geval, en voor uw begrip, hebben we ons dumpbestand "all-databases.sql" genoemd, maar u kunt elke andere naam van uw voorkeur gebruiken. Aangezien we met alle databases te maken hebben, is het noodzakelijk om een ​​root MySQL-accountgebruiker te zijn.

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

Een back-up maken van één database

Als slechts één MySQL-database belangrijk voor u is, moet u voor het maken van een back-up met de opdracht mysqldump de opdrachtoptie "[mysql_database]" vervangen door de werkelijke naam. De naam van het dumpbestand kan de naam van deze database "[mysql_database].sql" hebben, zodat het later gemakkelijk te traceren en te herstellen is. U kunt desgewenst ook een andere aangepaste dumpbestandsnaam gebruiken.

Deze voorbeeldopdracht wordt geïmplementeerd met behulp van de rootgebruiker, maar elke andere gebruiker met toegang tot de beoogde database is een haalbare optie.

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

Back-up maken van meerdere databases

Misschien heeft u specifieke MySQL-databases waarvan u een back-up wilt maken. In dit geval zal de opdrachtoptie "[mysql_database_name]" meer dan eens verschijnen, en elk geval is gekoppeld aan de naam van de database waarvan u een back-up wilt maken. Vergeet niet om de namen van deze databases op de opdracht mysqldump te plaatsen. Het dumpbestand "[mysql_database_name].sql" moet ook worden gekoppeld aan een unieke naam die u zult onthouden.

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

Een back-up maken van een enkele tabel

Als uw back-uproutine alleen achter een specifieke databasetabel aan zit, moet het maken van de back-up zowel de databasenaam als de databasetabelnaam als opdrachtopties van de opdracht mysqldump hebben. U kunt uw dumpbestand dezelfde naam geven als de doeldatabasetabel, b.v. [mysql_database_tabelnaam].sql.

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

Back-up maken van meerdere tabellen

Als u een back-up wilt maken van veel specifieke MySQL-databasetabellen, moet een vermelding van al uw geselecteerde databasetabelnamen komen na de databasenaam die deze tabellen host. Het beoogde dumpbestand kan een naam hebben als [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

Back-up maken van een externe database(s)

Deze voorbeeldimplementatie is ook eenvoudig. De MySQL-databasedumpopdracht moet de opdrachtoptie "-h" bevatten, gevolgd door de hostnaam van de externe machine of het bijbehorende IP-adres. Alle andere gebruikelijke syntaxis van de databaseback-upcommando's zouden dan moeten volgen.

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

U kunt deze mysqldump-opdracht aanpassen aan de andere gevallen van databaseback-up die al zijn besproken, bijvoorbeeld MySQL-back-ups met meerdere databases of tabellen.

Back-up maken van een database die is gekoppeld aan compressies

Als u uw gegevensback-ups wilt koppelen aan compressies, wordt de “| gzip -c>” mysqldump-opdrachtoptie kan worden gebruikt om een ​​gzip-uitvoer te pipen.

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

Als uw MySQL-database enorm is en u de voortgang van de compressie wilt bijhouden, overweeg dan altijd om de uitgebreide optie te implementeren, zoals weergegeven in het volgende voorbeeld.

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

MySQL-database herstellen

Als u klaar bent met uw MySQL-databaseback-up, wat nu? Hoe krijg je toegang tot de gegevens die je zo zorgvuldig hebt beveiligd? Om uw gegevens te herstellen, moet u zich houden aan de volgende MySQL-herstelsyntaxis.

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

Zoals je misschien nog niet hebt opgemerkt, is het enige verschil tussen deze opdracht voor databaseherstel en de opdracht voor databaseback-up dat we de optie "mysql" gebruiken in plaats van de optie "mysqldump" en de optie "<" in plaats van de optie ">".

MySQL-back-ups automatiseren

Het Linux-besturingssysteem is uitgerust met verschillende handige services die van onschatbare waarde zijn voor een databasebeheerder zoals die onder het MySQL RDBMS. Een van deze services is de cron-service. Het is effectief bij het plannen van geautomatiseerde opdrachten. Deze commando's, eenmaal gemaakt, worden toegewezen aan de crontab cron-tabel. Je hebt toegang tot crontab via de volgende opdracht.

$ sudo crontab -e

Als daarom wordt gevraagd, wil deze opdracht de uitvoering mogelijk koppelen aan een teksteditor om de nano-teksteditor te selecteren.

Een bestand met een naam als "/tmp/crontab.LVY6A9/crontab" wordt geopend. Onderaan dit crontab-bestand voert u een uitvoerbaar cron-schema in samen met een toepasselijke MySQL-dumpopdracht. Het onderstaande voorbeeld implementeert het gebruik van gzip-compressie voor dagelijkse databaseback-ups. Soms zijn er grote .sql-bestanden gepland voor back-up. Het gebruik van gzip verkleint dergelijke bestanden tot een redelijke grootte voordat de back-up wordt opgeslagen. Het helpt bij het beheer van back-upgeheugen.

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

De opdrachtoptie “00 03 ***” kan op de volgende manier worden geïnterpreteerd. Elke 24 uur na 3 uur 's nachts wordt het mysqldump-commando dat erop volgt uitgevoerd om een ​​back-up van een database te maken. Het databaseback-upbestand dat op dat moment bestond voordat dit back-upproces werd gestart, wordt overschreven. In jouw geval hoef je niet na 24 uur te wachten om getuige te zijn van de automatisering van je databaseback-up in actie via crontab.

Je kunt de optie "00 03 ***" in het crontab-bestand bewerken in iets als "02 00 ***", en in slechts twee minuten zou het back-upproces zichzelf moeten initialiseren. Als alternatief, als uw tijd 22:30 is, zal het bewerken van het bestand met "34 22 ***" het back-upproces van de database om 22:34 initialiseren. Vergeet niet om dit crontab-bestand op te slaan (Ctrl+X) voordat u het sluit, zodat deze opdracht uitvoerbaar wordt.

Nadat de door u ingestelde minuten zijn verstreken, zou de cron-taak moeten zijn uitgevoerd. Geef vervolgens de gemaakte back-upmap op uw terminal weer en het gemaakte .sql.gz-back-upbestand zou aanwezig moeten zijn.

$ ls -l /var/www_my_backups/

De resulterende uitvoer zou als volgt moeten zijn:

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

Als je problemen hebt met het vinden van het .sql.gz MySQL-back-upbestand, lees dan je crontab-tijd of de hele opdracht na. Er kan een syntaxisfout zijn of er kan iets ontbreken. Als alternatief kan het cron-logboek van het systeem verwijzen naar een probleem.

$ sudo grep CRON /var/log/syslog 

Vergeet niet om het crontab-item opnieuw in te stellen op het databaseschema van uw voorkeur zodra u hebt bevestigd dat alles correct werkt.

Mijn.cnf gebruiken om MySQL-databasewachtwoorden op te slaan  

We hebben al de nadelen genoemd van de optie "-p[mysql_password]" op een mysqldump-opdracht, vooral onder een gedeeld netwerk. We moeten bespreken hoe we wachtwoordopslag in het bestand "~/.my.cnf" kunnen implementeren. Gebruikers die cron gebruiken om hun databaseback-ups te automatiseren, moeten de implementatie van de opdrachtoptie “–defaults-extra-file=/path/to/.my.cnf” begrijpen.

Mijn.cnf-bestand bewerken

De homedirectory van je Linux-systeem bevat dit verborgen bestand. Het directe systeempad ernaartoe is "/home/your_username/.my.cnf". Gebruik de nano-teksteditor om dit bestand te openen. De optie "~" verwijst naar de homedirectory.

$ sudo nano ~/.my.cnf

Bewerk dit geopende bestand volgens de volgende syntaxis om uw MySQL-databasewachtwoord op te slaan. Het gedeelte "YOUR_DB_PASS" is het enige item dat u hoeft te wijzigen met uw daadwerkelijke databasewachtwoord. Voer deze informatiedetails onderaan het bestand in en sla ze op.

[mysqldump] 
password=YOUR_DB_PASS

Gebruik Ctrl+X om dit bestand op te slaan. Dit "my.cnf"-bestand heeft ook enkele machtigingsinstellingen nodig. Implementeer de volgende opdracht:

$ sudo chmod 600 ~/.my.cnf

Het is nu tijd om de herschepping van onze nieuwe mysqldump-opdracht te zien, waarbij de opdrachtoptie "-p[mysql_password]" is geëlimineerd.

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

Zoals je kunt zien, hebben we niets toegevoegd. Het lijkt erop dat het enige dat we hebben verwijderd de opdrachtoptie "-p[mysql_password]" is.

Crontab en –defaults-extrs-file

Voor gebruikers die de voorkeur geven aan het automatiseren van databaseback-ups, moet u het databasewachtwoord ophalen in het bestand "~/.my.cnf" via de opdrachtoptie "–defaults-extra-file". Deze benadering maakt dingen gemakkelijk voor de opdracht mysqldump wanneer deze moet verwijzen naar de authenticiteit van de databasegebruiker en het wachtwoord. U moet specifiek zijn over het pad naar het my.cnf-bestand en niet alleen het "~"-symbool gebruiken. Overweeg de volgende implementatie in het crontab-bestand:

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 dit voorbeeld wordt crontab elke dag om 22:30 uur uitgevoerd om een ​​back-up gzip-compressie van de MySQL-database te maken.

Laatste opmerking

In dit artikel werd gekeken naar back-upmechanismen voor lokale databases over de back-upmap "/var/www_my_backups". Aangezien u nu begrijpt hoe het back-upproces plaatsvindt, moet u hoger schalen en gaan nadenken over offsite back-ups. Een meer praktische benadering is echter via SFTP-toegangsconfiguratie die verwijst naar deze back-upmap "/var/www_my_backups".

Met een dergelijke configuratie is het mogelijk om een ​​SFTP-cronjob te creëren via een externe server om 's nachts en dagelijks een kopie van deze lokaal opgeslagen databasebestanden op te halen voor verzekeringsopslag.

Nu we deze geweldige artikelgids afsluiten, bent u nu een trotse meester van MySQL-databaseback-upscenario's, databaseback-upherstel en automatisering van databaseback-ups. U zou nu een sprong in het diepe moeten maken en vertrouwen moeten hebben in het gebruik van cron-taken om de back-upautomatisering van uw MySQL-database te plannen en af ​​te handelen. De automatiseringsschema's hoeven niet dagelijks te zijn, ze kunnen ook wekelijks en maandelijks zijn.


  1. kan database niet kopiëren met SQLiteAssetHelper-klasse

  2. Hoe GROTE BLOB's (> 100 MB) in Oracle te behouden met Hibernate

  3. Een overzicht van logische replicatie in PostgreSQL

  4. .csv importeren met tijdstempelkolom (dd.mm.jjjj uu.mm.ss) met psql \copy