Een dump gemaakt door mysqldump herstellen. Het dumpen van de MySQL-database en het exporteren van gegevens naar de console

Database dumpen en herstellen MySQL-gegevens Het is vrij eenvoudig en handig om op afstand te doen via SSH of rechtstreeks via de serverconsole. Op afstand kan dit met behulp van Putty/Kitty-programma's. U kunt de onderstaande voorbeelden ook op Windows uitvoeren door de opdrachtregel ‘ cmd‘. Hieronder vindt u voorbeelden van hoe u MySQL-databasedumps kunt maken en deze indien nodig kunt herstellen, bijvoorbeeld voor uw website, online winkel of een ander project.

Een MySQL-databasedump maken

Om deze opdrachten uit te voeren, maakt u op afstand verbinding met uw server via SSH met behulp van een van de hierboven genoemde programma's. Nadat u verbinding heeft gemaakt en autoriseert met de server/hosting, kunt u de onderstaande opdrachten invoeren.

# Maak een back-up van één database naar het bestand dump_file.sql mysqldump -uroot -p your_base > dump_file.sql # Aan ramen dumpen Het is het beste om een ​​iets andere opdracht te maken die voorkomt # dat dumpregels per ongeluk worden overschreven vanwege de conversie van nieuweregeltekens "\r\n" naar "\n" mysqldump -uroot -p your_base -r dump_file_utf8.sql # Als u een back-up nodig heeft van alleen individuele tabellen, en niet van de gehele database # (specificeer de tabelnamen gescheiden door een spatie na de databasenaam) mysqldump -uroot -p your_base TABLE1 TABLE2 TABLE3 > dump_file.sql # Als u alleen een back-up van de database moet maken structuur zonder de gegevens zelf mysqldump -uroot -p -- no-data your_base > dump_file.sql # Maak een back-up van alle databases naar het bestand current_date.gz mysqldump -uroot -p --all_databases | gzip -c > "date "+%Y-%m-%d"".gz # Back-up, waarbij voor elk record een afzonderlijke INSERT wordt gemaakt # en met een expliciete indicatie van de database die UTF-8 mysqldump -uroot -p codeert --default- character-set=utf8 jouw_base --extended-insert=FALSE | gzip -c > "datum "+%Y-%m-%d"".gz

# Maak een back-up van één database naar dump_file.sql

mysqldump - uroot - p jouw_basis > dump_bestand . sql

# Op Windows kun je het beste een dump maken met een iets ander commando dat dit verhindert

# willekeurig overschrijven van dumpregels vanwege conversie van nieuweregeltekens "\r\n" naar "\n"

mysqldump - uroot - p jouw_basis - r dump_bestand_utf8 . sql

# Als u alleen een back-up nodig heeft van individuele tabellen, en niet van de hele database

# (geef tabelnamen aan, gescheiden door een spatie na de databasenaam)

mysqldump - uroot - p uw_basis TABEL1 TABEL2 TABEL3 > dump_bestand . sql

# Als u alleen een back-up van de databasestructuur moet maken, zonder de gegevens zelf

mysqldump - uroot - p -- geen - gegevens uw_basis > dump_bestand . sql

# Maak een back-up van alle databases naar het bestand current_date.gz

mysqldump - uroot - p -- all_databases | gzip - c > "datum "+%Y-%m-%d"" . gz

# Back-up, waarbij voor elke invoer een aparte INSERT wordt gemaakt

# en expliciet de databasecodering UTF-8 specificeren

mysqldump - uroot - p -- standaard - karakter - set = utf8 jouw_basis -- uitgebreid - insert = FALSE | gzip - c > "datum "+%Y-%m-%d"" . gz

In het bovenstaande voorbeeld wordt het hulpprogramma gebruikt om een ​​back-up te maken mysqldump, dat bij mysql wordt geleverd. Hieronder volgen de parameters voor het maken van een databaseback-up, die we in meer detail zullen onderzoeken:

  • -u– de parameter specificeert de login die zal worden gebruikt om verbinding te maken met de database. In het voorbeeld gebruiken we de root login, die in deze parameter zonder spatie moet worden opgegeven! Als resultaat lijkt het op -uroot
  • -P– de parameter geeft aan dat u een wachtwoord moet invoeren voor de opgegeven login. We hebben het leeg gelaten, waardoor het wachtwoord moet worden ingevoerd nadat u op "Enter" hebt gedrukt bij het uitvoeren van de opdracht. U kunt het wachtwoord hier echter opgeven, zoals in de login-parameter, zonder een spatie na -p. Deze methode is echter niet veilig, omdat de console uw opdrachten in een logbestand opslaat en als u dit niet regelmatig wist, het kan door een aanvaller worden bekeken.
  • jouw_basis– in plaats van deze regel in het voorbeeld moet u de echte naam opgeven van uw database waarvan u een back-up maakt.
  • > – een operator die de richting van actie aangeeft, d.w.z. alsof het aangeeft dat u vanuit de database naar een bestand gaat schrijven.
  • dump_bestand.sql– dit is de naam van uw .slq-bestand waarin u uw database moet opslaan. Dit wordt aangegeven met een spatie na de operator ‘>’. U kunt elke andere naam opgeven. Bijvoorbeeld zodat het systeem automatisch in de naam invoegt huidige tijd, specificeer gewoon een regel zoals:

    "datum "+%J-%m-%d""

    "datum "+%J-%m-%d""


    na deze regel in het voorbeeld wordt de bestandsextensie aangegeven ‘ .gz‘. Als gevolg hiervan verschijnt een bestand als ‘ 2014-11-15.gz‘.

    Aandacht! Als u alleen de bestandsnaam opgeeft, wordt deze opgeslagen in dezelfde map waarin u de opdracht uitvoert deze opdracht. Die. als je zoiets ziet bij de opdrachtprompt # , Waar root@dvs dit is de login- en servernaam, het bestand wordt in de directory aangemaakt /thuis. Om het opslaan van het bestand naar een ander pad te wijzigen, geeft u in plaats van de naam op volledige pad om een ​​bestand op te slaan, bijvoorbeeld: /var/www/backup/dump_file.sql.

  • In het tweede voorbeeld wordt in plaats van de operator ‘ > Er wordt gebruik gemaakt van ‘operator’ | ’, wat de noodzaak tot presteren aangeeft extra opdracht gzip met parameter ‘ -C‘ waarmee u de dump onmiddellijk in een archief kunt inpakken en deze pas daarna kunt opslaan in een bestand als ‘ 2014-11-15.gz‘, zo meldt de exploitant ‘ > ‘.
  • Parameter –geen gegevens Hiermee kunt u alleen de databasestructuur dumpen zonder de gegevens zelf. Heel handig in sommige gevallen waarin de gegevens niet nodig zijn.
  • Opties –standaard-tekenset=utf8 En –extended-insert=FALSE. Met de eerste kunt u expliciet de codering opgeven die door deze database wordt gebruikt, waardoor u voorkomt dat de database in de verkeerde codering wordt opgeslagen. In plaats van utf8 kunt u elke andere codering opgeven, bijvoorbeeld cp1251. Met de tweede parameter kunt u opgeven dat bij het exporteren voor elk record een afzonderlijk INSERT-commando moet worden aangemaakt. In sommige gevallen kan dit nodig zijn bij het gedeeltelijk herstellen van gegevens uit een dump.
  • Een database herstellen vanuit een MySQL-dumpbestand

    Laten we nu eens kijken naar het omgekeerde proces van het herstellen van een database vanuit een dumpbestand. Deze actie uitgevoerd met behulp van het mysql-programma. Laten we meteen naar een voorbeeld kijken.

./mysql -u -P H < db_dump-file

2018-12-04T00:00Z

2018-12-11T00:00Z

Wanneer we een dumpbestand maken met mysqldump, bevat het een groot SQL-script om de inhoud van de database opnieuw te creëren. Dus we herstellen het door de opdrachtregel van de MySQL-client uit te voeren:

Mysql -uroot -p

(waarbij root onze beheerdersgebruikersnaam voor MySQL is) en nadat we verbinding hebben gemaakt met de database, hebben we opdrachten nodig om de database te maken en het bestand te lezen:

Database new_db maken; gebruik nieuwe_db; \. dumpbestand.sql

De details variëren afhankelijk van welke opties zijn gebruikt bij het maken van het dumpbestand.

2018-12-18T00:00Z

Je hoeft alleen maar dit uit te voeren:

mysql-p-u< db_backup.dump

Als de dump meerdere databases bevat, moet u de databasenaam weglaten:

mysql-p-u< db_backup.dump

Om deze opdrachten uit te voeren, opent u een opdrachtprompt (op Windows) en cdt u naar de map waar mysql.exe het uitvoerbare bestand mysql.exe bevat (u moet er misschien even over nadenken, het zal afhangen van hoe u mysql hebt geïnstalleerd, d.w.z. zelfstandig of als onderdeel van een pakket zoals WAMP). Wanneer u zich in deze map bevindt, hoeft u alleen maar de opdracht in te voeren.

2018-12-25T00:00Z

Het zou zo eenvoudig moeten zijn als dit uitvoeren:

Mysql-u -P< db_backup.dump

Als de dump één enkele database heeft, moet u mogelijk een regel bovenaan het bestand toevoegen:

GEBRUIK ;

Als het een dump van veel databases is, zijn de gebruiksinstructies er al.

Om deze opdrachten uit te voeren, opent u een opdrachtprompt (op Windows) en cdt u naar de map waar mysql.exe het uitvoerbare bestand mysql.exe bevat (u moet er misschien even over nadenken, het zal afhangen van hoe u mysql hebt geïnstalleerd, d.w.z. zelfstandig of als onderdeel van een pakket zoals WAMP). Als u zich eenmaal in die map bevindt, kunt u eenvoudig de opdracht typen zoals ik hierboven deed.

01-01-2019T00:00Z

Eénregelige opdracht om gegenereerde SQL uit mysqldump te herstellen

Mysql-u -P E" bron

2019-01-08T00:00Z

Met behulp van een dumpbestand van 200 MB gemaakt op Linux om te herstellen op Windows met mysql 5.5, had ik meer succes Met

Bronbestand.sql

teambenadering mysql-reeksen dan gebruiken

mysql< file.sql

naderen binnen opdrachtregel veroorzaakt een foutmelding "server is vertrokken" uit 2006 (in Windows)

Vreemd genoeg verwijst de service die tijdens de (mysql)installatie is gemaakt naar een my.ini-bestand dat er niet was. Ik heb het "grote" voorbeeldbestand naar my.ini gekopieerd, dat ik al had aangepast met de aanbevolen vergroting.

Mijn waarden

Max_allowed_packet = 64M interactieve_timeout = 250 wait_timeout = 250

2019-01-15T00:00Z

Als concreet voorbeeld vorig antwoord:

Ik moest de back-up herstellen, zodat ik deze kon importeren/overbrengen naar SQL-server. Ik heb alleen MySql geïnstalleerd, maar heb het niet als een service geregistreerd en heb het ook niet aan mijn pad toegevoegd, omdat ik het niet hoef uit te voeren.

Ik gebruikte Windows Verkenner om mijn dumpbestand in C:\code\dump.sql te plaatsen. Open vervolgens MySql via het menu-item Start. De DB gemaakt en vervolgens de bronopdracht met het volledige pad als volgt uitgevoerd:

Mysql> maak database temp mysql> gebruik temp mysql> bron c:\code\dump.sql

Meestal kunt u uw database eenvoudig beheren via webtools zoals PHPMyAdmin. Helaas zijn er momenten waarop herstel nodig is groot aantal gegevens. Dit kan niet worden bereikt via PHPMyAdmin van buiten PHP (ook niet maximale tijd het script werkt niet of kan niet worden geladen groot archief uit de databank).

MySQL gebruiken vanaf de opdrachtregel

Als u MySQL op Linux of MS Windows gebruikt, kunt u de opdrachtregel gebruiken om de meeste taken uit te voeren. Als u MS Windows gebruikt, zorg er dan voor dat het pad naar uitvoerbare bestanden De opdrachtregel is opgenomen in het systeempad. Anders moet u het volledige pad naar elke opdracht invoeren.

Een back-up maken van een MySQL-database

MySQL biedt een hulpprogramma genaamd "mysqldump." Kortom, deze tool maakt een plat bestand aan met MySQL-instructies om de database te repareren. Hier zijn enkele voorbeelden van het gebruik van mysqldump:

Een eenvoudige databaseback-up maken

# mysqldump -u gebruikersnaam -p DB_naam > uw_bestand.sql

Hiermee wordt een bestand gemaakt met alle MySQL-instructies voor het maken van tabellen en het herstellen van gegevens bestaande basis gegevens. Als de doeldatabase tabellen met dezelfde naam bevat, worden deze overschreven. Als u wilt dat bestaande tabellen worden verwijderd en opnieuw worden gebruikt, gebruikt u de optie "add-drop-table":

# mysqldump --add-drop-table -u gebruikersnaam -p DB_naam > uw_bestand.sql

Je kunt dit ook als alternatief kiezen:

# mysqldump --add-drop-databases -u gebruikersnaam -p DB_naam > uw_bestand.sql

Maak een back-up van meerdere databases

U kunt een kopie maken van meerdere databases in één bestand met behulp van de databaseoptie:

# mysqldump -u gebruikersnaam -p --databases uw_database1 uw_database2 uw_database3 > uw_bestand.sql

Het maken van een back-up van alle databases kan worden bereikt met behulp van de optie voor alle databases:

# mysqldump -u gebruikersnaam -p --all-databases > jouw_bestand.sql

Een back-up maken van InnoDB-tabellen

Als uw database InnoDB-kolommen heeft, moet u de referentiële integriteit uitschakelen wanneer u de gegevens herstelt. Helaas kan dit niet met behulp van mysqldump-hulpprogramma's. Om dit te doen, moet je het bestand zelf openen en toevoegen:

SET FOREIGN_KEY_CHECKS = 0;
... En voeg het volgende toe aan het einde van het bestand:
SET FOREIGN_KEY_CHECKS = 1;

MySQL-dumpbestanden comprimeren

Als u mysqldump gebruikt in Linux-shell, kunt u via Gzip comprimeren om het dumpbestand te comprimeren (ervan uitgaande dat gzip is geïnstalleerd):

# mysqldump -u gebruikersnaam -p uw_databasenaam | gzip -c jouw_bestand.sql.gz

Herstellen vanaf een MySQL-back-up

Om een ​​back-up gemaakt met mysqldump te herstellen, moet u de MySQL-opdracht gebruiken. Als uw MySQL-dumpbestand geen "Create Database" o bevat, kunt u de volgende opdracht gebruiken:

# mysql -u gebruikersnaam -p uw_databasenaam< your_file.sql

Maar als dit lukt, gebruik dan dezelfde opdracht zonder de databasenaam op te geven:

# mysql -u gebruikersnaam -p< your_file.sql

Meer gedetailleerde informatie over mysqldump is te vinden op de officiële MySQL-website.

U hebt waarschijnlijk databasedumps meer dan eens moeten importeren. En ondanks de trivialiteit van deze taak, ontstaan ​​​​er vaak vragen en soms problemen die hiermee gepaard gaan. Hieronder vindt u alle code die u nodig hebt om snel een databasedump toe te passen vanaf de opdrachtregel.

NAMEN INSTELLEN utf8; DROP DATABASE `mydb`; CREËER DATABASE `mydb` STANDAARD TEKENSET utf8; GEBRUIK `mijndb`; SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET autocommit=0; SET Foreign_key_checks=0; SET unieke_checks=0; BRON /pad/naar/db_dump.sql; VERBINDEN; SET autocommit=1; SET Foreign_key_checks=1; SET unieke_checks=1;

Met deze opdrachten kunt u snel een databasedump importeren en problemen voorkomen. Bovendien worden sommige van deze problemen zelfs door gewone mysql-clients, zoals phpMyAdmin en anderen, niet opgelost.

Laten we proberen het uit te zoeken deze code in volgorde.

NAMEN INSTELLEN utf8; zegt dat de gegevensuitwisseling zal plaatsvinden in UTF-8-codering en dat is waar het zich bevindt bronbestand database dump en dit is wat de uiteindelijke database zal hebben.

DROP DATABASE `mydb`; En CREËER DATABASE `mydb` STANDAARD TEKENSET utf8; presteren vernietiging database en de daaropvolgende creatie ervan met de standaardcodering UTF-8. Het is duidelijk dat hierdoor alle tabellen en gegevens daarin worden gewist, maar dit geeft ons het vertrouwen dat de resulterende database volledig zal overeenkomen met de gegevens in het dumpbestand.

GEBRUIK `mijndb`; geeft aan dat deze specifieke database moet worden gebruikt voor alle opdrachten uit het dumpbestand (controleer het dumpbestand op de aanwezigheid van deze richtlijn die een andere database aangeeft om verwarring te voorkomen).

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; schakelt standaard het verhogen van de teller voor automatisch verhogen uit bij het schrijven van de waarde 0 naar het veld voor automatisch verhogen NULL-waarden of 0, het wordt automatisch verhoogd. En hoewel het hebben van een waarde van 0 in een automatisch incrementeel veld dat niet is beste praktijk, soms komt het nog steeds voor dat er zulke regels in de dump staan ​​(ik kwam iets soortgelijks tegen in een dump van Magento). Het is ook de moeite waard om te vervangen wat mysqldump al een tijdje bevat deze richtlijn standaard in hun stortplaatsen.

SET autocommit=0; voordat u de dump uploadt en VERBINDEN; daarna versnellen ze de uitvoering van INSERT's voor InnoDB-tabellen, omdat wanneer de auto-commit-modus is ingeschakeld, logs bij elke INSERT op schijf worden opgeslagen. Kan helpen bij het rollen van grote stortplaatsen.

SET Foreign_key_checks=0; de meest voor de hand liggende optie, zonder welke de meeste stortplaatsen helemaal niet zouden kunnen worden toegepast. Schakelt controles van externe sleutels uit, waardoor gegevens in elke volgorde kunnen worden geschreven, ook met cyclische referenties vreemde sleutels. Deze optie versnelt ook de dumpimport.

SET unieke_checks=0; schakelt uniciteitscontroles uit voor secundaire sleutels, wat het importproces opnieuw kan versnellen.

En tot slot, het hoofdteam voor wie dit allemaal was gepland - BRON /pad/naar/db_dump.sql; importeert rechtstreeks mysql-databasedump uit opgegeven bestand. Het pad naar het bestand kan absoluut of relatief zijn ten opzichte van de map van waaruit u de MySQL-console hebt geopend.

En nadat het importeren is voltooid, herstellen we de waarde van de vlaggen, hoewel dit niet hoeft te worden gedaan, omdat de opdracht SET in mysql verandert standaard de waarden van variabelen alleen in de context van de huidige sessie.

Van de auteur: Ik kwam op bezoek bij een vriend, en zijn vrouw was hysterisch, de papegaai schreeuwde: "Mai-es-qu-el-dump." De vriend zelf ligt met hoofdpijn en een manisch verlangen om erachter te komen hoe herstel van een dump plaatsvindt in MySQL. Laten we, om de hoofden van de rest van de ‘onwetenden’, de zenuwen van hun vrouwen en de stembanden van papegaaien te redden, dit onderwerp in meer detail bekijken.

Gevaar "All-inclusive"

Mijn vriend gebruikt, net als veel nieuwelingen softwarepakketten"All-inclusive." De meest voorkomende in RuNet is heren setje"Deventer". En met zijn “complexiteit” (het omvat lokale server, een shell voor het werken met een DBMS, MySQL-server) drijft hij deze ‘heren’ tot het punt van waanzin.

De selectie van Denver bevat er slechts een paar standaard nutsvoorzieningen voor het werken met MySQL. En aangezien wij allemaal moderne mensen, dan gaan we voor de ontbrekende informatie (om de essentie van iets te begrijpen) naar internet. Maar de materialen die op internet zijn gepubliceerd, zeggen niet dat voor het uitvoeren van bepaalde sets opdrachten gespecialiseerde hulpprogramma's nodig zijn in het standaard MySQL-pakket. Om bijvoorbeeld een dump van een MySQL-database te maken, hebt u het MySQLDump-programma nodig.

Als u Denwer ook gebruikt om uw code te trainen en te testen, en de in dit materiaal beschreven query's worden niet uitgevoerd op de opdrachtregel, ga dan naar: D:\Webserver\usr\local\mysql-5.5\bin

En kijk welke hulpprogramma's voor het werken met de DBMS-server "aan boord" beschikbaar zijn klantmachine. Ik herhaal nogmaals: vandaag hebben we het MySQLDump-programma nodig.

Werken met MySQLDump

Dit hulpprogramma is een normaal “uitvoerbaar” bestand, dat na het downloaden in het bestand moet worden geplaatst map bin(het pad ernaartoe wordt aangegeven in het eerste deel van het materiaal). Dit kleine toepassing Hiermee kunt u "algemene" problemen oplossen - herstellen vanaf een dump in MySQL, back-ups maken en back-upparameters configureren.

Het hulpprogramma heeft geen eigen interface, je werkt er dus mee via de standaard CMD die meegeleverd wordt standaard ingesteld Windows-programma's(start via het Startmenu). En nu stap voor stap:

Eerst gaan we naar de virtuele schijf (gemaakt na het starten van Apache, onderdeel van Denver).

Als u geen herenset gebruikt, betekent dit niet dat u geen heer bent. U hoeft alleen deze stap van de instructies over te slaan.

Geef vervolgens met behulp van de opdracht cd (change directory) het pad op naar de map waarin MySQL is geïnstalleerd. In Denver bevindt deze map zich hier: Z:\usr\local\mysql-5.5\bin

Wanneer u het databasebeheersysteem afzonderlijk installeert, bevindt deze map zich: C:\Program Files…

Omdat we ons al op de gewenste (virtuele) schijf bevinden, hoeven we na het cd-commando slechts een deel van het pad op te geven:

Laten we de functionaliteit van de applicatie controleren en creëren MySQL-dump database, die zich op onze server bevindt. Bijvoorbeeld de ‘wordpress’-database. Om dit te doen, zullen we het gelijknamige hulpprogramma gebruiken mysql-opdracht dumpen. Hier is de syntaxis:

mysqldump -u gebruikersnaam -p wachtwoord naam_database > backup-database.sql

mysqldump -u gebruikersnaam -p wachtwoord naam_database > backup-database. sql

Voorbeeld van het gebruik van de opdracht:

mysqldump -uroot wordpress>Z:\home\localhost\dump\wp_copy.sql

mysqldump - uroot wordpress > Z:\home\localhost\dump\wp_copy. sql

Als gevolg hiervan ontvingen we een databasedump van de WordPress-site:

Wat is een puinhoop?

Als u niets weet over een MySQL-databasedump, en u kunt moeilijk raden wat het is, dan deze sectie voor jou. Een dump is een type databaseback-up. Nauwkeuriger gezegd: databasekopiebestanden (afhankelijk van het type en de aanmaaktool) kunnen dataregels bevatten bepaald type, en bevatten ook SQL-query's om verloren informatie, de structuur en parameterwaarden ervan te reconstrueren.

Laten we, om niet ongegrond te zijn, de kopie van wp_copy openen die we hebben gemaakt met het standaard Kladblok. Na een korte studie van de inhoud zullen we zien dat het bijna volledig uit queries bestaat die gebruikt kunnen worden om de structuur van databasetabellen en hun inhoud te herscheppen.

Herstel testen

Als uw handen jeuken en zeep niet helpt, voeren we een “testrun” uit van het hulpprogramma. Om te beginnen zullen we via phpMyAdmin (om het sneller te maken) een test-“Auto”-database maken met twee tabellen. Laten we de ene “auto” noemen en de andere “kleur”. Voeg voor de duidelijkheid een paar regels met gegevens toe.

Laten we nu een MySQL-dump maken van de database waarin we geïnteresseerd zijn. Back-up Laten we het op dezelfde plek houden. Aanvraagcode:

mysqldump -uroot auto>Z:\home\localhost\dump\auto_copy.sql

mysqldump - uroot auto > Z:\home\localhost\dump\auto_copy. sql

Als we naar de dumpmap gaan, zien we dat het hulpprogramma een kopie “auto_copy” heeft gemaakt.