MySQL-dumphersteltools - bespaar papegaaienbundels! Dump en herstel de MySQL-database

Het maken van een databasedump (back-up) is erg belangrijk. Daarom heb ik enkele opmerkingen gemaakt met voorbeelden hiervoor uitstekend nut zoals mysqldump.

mysqldump - een hulpprogramma waarmee u de inhoud van een database of een reeks databases kunt dumpen om een ​​back-upkopie te maken of gegevens naar een andere SQL-databaseserver te verzenden (niet noodzakelijkerwijs een MySQL-server). De dump bevat een reeks SQL-opdrachten om tabellen te maken en/of te vullen.

mysqldump-u root -p -f naam_database >

Met dit team doen we dat wel back-up van de database gegevens onder de naam naam_database naar station C in het bestand mydb_backup_name_database.txt

U hoeft het bestand niet aan te maken; MySQL maakt het zelf.

mysql-u root -p -f naam_database< C:\mydb_backup_name_database.txt

Met dit commando importeren we back-upgegevens uit het bestand C:\mydb_backup_name_database.txt

Opmerking: -f, --force is een optie die specificeert om door te gaan, zelfs als er een SQL-fout wordt ontvangen, d.w.z. fouten negeren. Bijvoorbeeld als er al een identieke rij in de tabel bestaat.

Om te voorkomen dat u om een ​​wachtwoord wordt gevraagd, moet u dit onmiddellijk na -p schrijven, dat wil zeggen zonder spaties. Als het wachtwoord Pwd, dan zou het voorbeeld er als volgt uitzien:

mysqldump-u wortel -p Pwd-f naam_database > C:\mijndb_backup_naam_database.txt

Als je vaak gebruikt deze opdracht, dan is het beter om te doen individuele gebruiker Met noodzakelijke rechten, om het rootwachtwoord minder zichtbaar te maken

Laten we er meer over nadenken fijne instellingen mijnsqldump:

--databases staat toe dat mysqldump de opdrachten CREATE DATABASE /*!33333 IF NOT EXISTS*/ DBNAME en USE DBNAME opneemt in het herstelscript. Hiermee kunt u vanaf het begin werkende databases maken. Dat wil zeggen, zonder --databases te gebruiken, wordt aangenomen dat de gebruiker een enkele database herstelt en expliciet specificeert waar de herstelde gegevens moeten worden geplaatst. Als er een back-up wordt gemaakt met als doel een volledig werkende kopie van de gegevens te maken, bijvoorbeeld op een andere MySQL-server, dan moet u deze sleutel gebruiken;

--alle databases Hiermee kunt u kopieën maken van alle databases die op een bepaalde MySQL-server bestaan. Als u slechts enkele databases wilt kopiëren, hoeft u deze alleen maar op te geven, gescheiden door een spatie, wanneer u mysqldump aanroept vanuit opdrachtregel(zie hierboven);

Sleutel --hulp. Het mysqldump-programma heeft vele versies. Met deze sleutel kunt u zien welke functies specifiek door uw versie worden ondersteund;

--add-drop-tabel- een schakelaar die mysqldump dwingt een drop table-opdracht aan het resulterende script toe te voegen voordat tabellen worden gemaakt. Hiermee kunt u enkele fouten voorkomen bij het herstellen van een database vanaf een back-up. Natuurlijk moet u er rekening mee houden dat de tabellen in de werkkopie (als er tabellen met dezelfde naam in de back-up voorkomen) uit de hoofddatabase worden verwijderd en opnieuw worden aangemaakt vanuit de back-up voordat ze worden hersteld vanaf de back-up;

--geen gegevens. Met deze sleutel kunt u snel een kopie maken van de tabel-/databasestructuur zonder de gegevens zelf. U heeft bijvoorbeeld een complexe tabel gemaakt en u wilt de structuur ervan voor de toekomst bewaren, maar u hebt de gegevens zelf die in deze tabel staan ​​niet nodig in een reservekopie;

--resultaatbestand=...- deze schakelaar kan worden gebruikt om de uitvoer naar een bestand om te leiden. U kunt een normale Unix-omleiding gebruiken met het commando ">", of u kunt deze sleutel gebruiken. Wie vindt wat leuk?

Nog een heel nuttig advies over het gebruik van mysqldump in een hostingomgeving. Bij het gebruik van hosting worden in de regel enkele beperkingen aan de gebruiker opgelegd. U kunt bijvoorbeeld niet meer lenen dan een bepaald bedrag fysiek geheugen(RAM, RAM). mysqldump plaatst standaard alle gegevens die van de MySQL-server worden ontvangen in het geheugen en schrijft deze vervolgens allemaal naar schijf. Dienovereenkomstig, als de provider u toestaat om bijvoorbeeld 30 MB geheugen in beslag te nemen, en de database, die u kopieert met mysqldump, 50 MB in beslag neemt, zal hier natuurlijk een fout optreden - mysqldump zal niet correct kunnen werken en zal crashen, waarover het u zal informeren. Om mysqldump te "forceren" om gegevens rechtstreeks naar schijf te schrijven, in plaats van deze, zelfs tijdelijk, in het geheugen op te slaan, gebruikt u de sleutel --snel. Dit zal het probleem oplossen.

Hier zijn nog een paar nuttige voorbeelden:

mysqldump -u root -p Pwd-f --standaard-tekenset=cp1251 DBNAAM| gzip -c > bestandsnaam.txt .gz

U kunt zo'n archief uitpakken met het commando:

gunzip bestandsnaam.txt.gz

Om te weten op welke datum de back-up is gemaakt, kunt u het volgende commando schrijven:

mysqldump -uLOGIN -PPORT -hHOST -pPASS DBNAME | gzip -c > `datum "+%Y-%m-%d"`.gz

en als je dumps moet maken met verschillende coderingen, dan is het handig om variabelen te gebruiken:

set DBKARAKTER= utf8

set DBNAAM= inbreuk

mysqldump -u root -p Pwd-f --standaard-tekenset=$ DBKARAKTER $DBNAAM| bzip2 -c > sql. $DBNAAM.`datum "+%Y-%m-%d"`.bz2

Als je het verwijderen van oude archieven wilt automatiseren, probeer dan cron en commando vinden, die meestal te vinden is in Unix. Periodiek uitgevoerd

vinden~/map-met-archieven -naam "*.gz" -mtime +7 -exec rm -f () \;

U verwijdert dus archieven die “ouder” zijn dan zeven dagen.

MySQL-databasedump is bekend bij elke webmaster. Dit is niet verrassend, omdat deze procedure wordt uitgevoerd als onderdeel van een back-up of overdracht van een database naar een andere hosting.

Daarom de mogelijkheid om de database te dumpen MySQL-gegevens belangrijk voor elke webontwikkelaar. Wat is het? Dit is een bestand met instructies voor SQL-taal, waardoor zowel qua inhoud als structuur een exacte kopie van uw database ontstaat. Voor welke situaties moet u de MySQL-database dumpen:

  • Een database overbrengen naar een andere server

Een dump kan nodig zijn als u van plan bent uw database naar een andere hosting over te zetten. Met zijn hulp kun je zonder problemen recreëren exacte kopie oude basis gegevens.

  • Databaseback-up

Virtuele websitehosting, inclusief dagelijks back-up. Regelmatige gegevensback-ups besparen u veel moeite en zenuwen in geval van onvoorziene situaties. Mislukt experiment met de site of een servercrash kan leiden tot het verlies van de hele database, en alleen een tijdige dump zal u in deze situatie helpen. Uiteraard kan het niet op dezelfde server worden opgeslagen als de hoofddatabase, omdat u anders alle informatie verliest zonder de mogelijkheid van herstel.

Hoe een MySQL-database dumpen?

Er zijn verschillende manieren een dump maken, en dan zullen we kijken naar de belangrijkste opties:

  • Een dump maken met behulp van de MySQL-console

In dit geval gebruikt u om een ​​databasedump te maken de opdrachtregel of de MySQL-console, waar u de opdracht mysqldump -uuser -ppass db_name > file_to_save moet invoeren. In dit geval is user de naam van de databasegebruiker met voldoende rechten om een ​​dump te maken, pass is het wachtwoord voor de database, db_name is de naam van de gewenste database en in plaats van file_to_save moet u de naam van het bestand opgeven waar de dump wordt opgeslagen.

Na het correct invoeren van de opdracht in opgegeven locatie er verschijnt een bestand met de extensie .sql, wat een databasedump is. Deze methode is het meest universeel en populair onder gebruikers van Unix-systemen, bijvoorbeeld Ubuntu, als dit plotseling nodig is MySQL-migratie naar een andere server. In hetzelfde geval, als je het niet weet console-opdrachten, je hebt extra nodig software.

  • Een databasedump maken met phpMyAdmin

Als u liever aanvullende software gebruikt, kunt u de database dumpen met behulp van PHP met behulp van bijvoorbeeld phpMyAdmin. Om dit te doen, volgt u deze stappen:

  1. Log in op phpMyAdmin.
  2. Selecteer de noodzakelijke basis gegevens uit de algemene lijst.
  3. Log in op de geselecteerde database.
  4. Na autorisatie bevat de linkerkolom de database zelf en de bijbehorende service-informatie. Nu moet u uw database opnieuw selecteren.
  5. Ga naar het tabblad "Exporteren" en schakel vervolgens enkele instellingen in, namelijk:

    Voeg DROP TABLE/VIEW/PROCEDURE/FUNCTION/EVENT toe

    Met deze optie kunt u de MySQL-database in de toekomst veilig herstellen vanaf een dump. Alle tabellen met dezelfde naam worden eerst verwijderd, dat wil zeggen dat de opdracht dpop wordt uitgevoerd en vervolgens wordt vervangen door soortgelijke tabellen uit uw dump. Als gevolg hiervan beschermt u uzelf tegen het maken van dubbele tabellen en als gevolg daarvan storing databases.

    Pak met ritssluiting

    Als u deze optie inschakelt, zorgt u ervoor dat uw DB-dump wordt gearchiveerd en dat u een bestand krijgt met de extensie .zip. Hierdoor kunt u de dump snel en correct opslaan, zelfs met een lage verbindingssnelheid.

  6. U ontvangt een kant-en-klare databasedump. Als alles correct is gedaan, heb je een archief met een bestand met de extensie .sql - een dump van de database die je nodig hebt.

Nu weet u hoe u een MySQL-dump kunt maken als u de database plotseling naar een andere server moet overbrengen of als er zich een andere situatie voordoet waarin een databaseback-up nuttig kan zijn. Naast de hierboven beschreven manieren zijn er natuurlijk nog veel meer manieren om een ​​dump te maken. Maar zelfs het bezit van het meeste eenvoudige opties en als u ze in de praktijk regelmatig toepast, kunt u er zekerder van worden onvoorziene situatie, omdat het voldoende is om simpelweg een MySQL-dump te implementeren en snel alle databases te herstellen.

Als u besluit een dedicated server van ons bedrijf te kopen, krijgt u daar 100 GB voor externe server back-ups, waar u automatische back-ups van websites en databases kunt instellen. In dit geval beschikt u altijd over een nieuwe MySQL-dump.

In het geval dat u nog steeds problemen ondervindt bij het maken van een dump en het wijzigen van een server of hosting, kunt u contact opnemen met de technische ondersteuningsmedewerkers van RigWEB, en zij zullen al uw vragen binnen hun competentie beantwoorden. Mocht u dit om wat voor reden dan ook niet zelf kunnen, dan verhuizen onze specialisten uw website gratis van een andere hosting naar de onze. Ook zorgen wij voor regelmatige back-ups en tijdige verstrekking van actuele kopieën van uw gegevens indien nodig. Met professionele RigWEB hosting weet u het zeker maximale bescherming uw project tegen verrassingen!

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.

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 vanwege buiten PHP (de maximale looptijd van het script staat dit niet toe of het is onmogelijk om te laden 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 je naar binnen volledige pad aan elk team.

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 te herstellen reservekopie gemaakt met mysqldump, moet u de MySQL-opdracht gebruiken. Als uw bestand MySQL-dump bevat geen "Create Database" oh, u kunt 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.

Het is vreemd, maar het is best moeilijk om deze informatie op internet te vinden. Een heleboel verkeerde aanbevelingen. Maar eigenlijk is alles eenvoudig. U kunt de dump herstellen met het commando:

# mysql-omhoog< mysql_dump.sql.

Vervang in plaats daarvan de gebruikersnaam, ik doe persoonlijk het herstel vanaf de root. En in mysql_dump, sql, wordt feitelijk de dump gemaakt mysqldump nutsvoorziening. De optie -p geeft autorisatie met een wachtwoord aan; na het indrukken van enter wordt u om een ​​wachtwoord gevraagd. Dat is eigenlijk alles. Je kunt een dump maken met het commando:

# mysqldump-u root -p -f databasenaam > bestand_met_dump.sql

Hier specificeert de parameter -f database_name de naam van de database die we opslaan. Als je alles nodig hebt, vervangen we het door --alle databases. Deze optie geeft aan dat alle databases op de server worden opgeslagen. Om het wachtwoord niet elke keer in te voeren, kunt u het rechtstreeks in de opdracht opgeven (dit is nodig als u een crondump vanuit een script doet), maar vanuit veiligheidsoogpunt rijzen hier vragen, vooral als de wachtwoord is wortel voor de spier. Nu, als de spier tenminste md5-wachtwoorden zou begrijpen... Het is echter geen feit dat hij het niet begrijpt, misschien weet ik het niet :)

Auteur

Alex Razgibalov

Een gekke man, van onbepaalde leeftijd, die lijdt aan een waan van vervolging. Pathologisch wantrouwend, egoïstisch, autoritair. Secundaire diagnoses - programmeur en assistent. Bezit Engels op een niveau van ongeveer waardeloze conversatie. Ook bekend met enkele andere talen. Hij is geïnteresseerd in alles en iedereen, waardoor zijn kennis op welk gebied dan ook oppervlakkig en oppervlakkig is. Het karakter is oncontroleerbaar. Sterkte - 55 graden.