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

Sådan sikkerhedskopieres og gendannes (eksportere og importere) MySQL-databaser Tutorial

phpMyAdmin kan bruges til nemt at eksportere eller sikkerhedskopiere MySQL- eller MariaDB-databaser. Men hvis databasestørrelsen er meget stor, vil det sandsynligvis ikke være en god idé. phpMyAdmin giver brugere mulighed for at gemme databasedump som fil eller visning på skærmen, hvilket involverer eksport af SQL-sætninger fra serveren og overførsel af data over langsommere netværksforbindelse eller internet til brugerens computer. Denne proces sænker eksportprocessen, øger databaselåsetiden og dermed utilgængeligheden af ​​MySQL eller MariaDB, sænker serveren og kan simpelthen nedbryde Apache HTTPD-serveren, hvis for mange indgående webforbindelser hæver systemets ressourcer.

Den bedre måde at sikkerhedskopiere og eksportere MySQL- eller MariaDB-database er ved at udføre opgaven lokalt på serveren, så tabellernes data øjeblikkeligt kan dumpes på den lokale disk uden forsinkelse. Eksporthastigheden vil således være hurtigere og reducere den tid, MySQL- eller MariaDB-databasen eller -tabellen er låst til at få adgang til. Denne vejledning er guiden til, hvordan du sikkerhedskopierer (eksporterer) og gendanner (importerer) MySQL- eller MariaDB-database(r) på selve databaseserveren ved at bruge mysqldump og mysql forsyningsselskaber. Der er grundlæggende to metoder til at sikkerhedskopiere MySQL eller MariaDB, den ene er ved at kopiere alle tabelfiler (*.frm, *.MYD og *.MYI filer) eller ved at bruge mysqlhotcopy hjælpeprogrammet, men det virker kun for MyISAM-tabeller. Nedenstående tutorial vil koncentrere sig om mysqldump, som virker til både MyISAM og InnoDB-tabeller.

Sådan eksporteres eller sikkerhedskopieres eller dumpes en MySQL- eller MariaDB-database

For at eksportere en MySQL- eller MariaDB-database til en dumpfil skal du blot skrive følgende kommandosyntaks i skallen. Du kan bruge Telnet eller SSH til at eksternt logge ind på maskinen, hvis du ikke har adgang til den fysiske boks.

mysqldump -u username -ppassword database_name > dump.sql

Erstat brugernavn med et gyldigt MySQL- eller MariaDB-bruger-id, adgangskode med den gyldige adgangskode for brugeren (VIGTIG:intet mellemrum efter -p og adgangskoden, ellers vil mysqldump bede dig om adgangskode, men vil behandle adgangskoden som databasenavn, så sikkerhedskopieringen vil mislykkes) og databasenavn med det faktiske navn på den database, du vil eksportere. Endelig kan du sætte et hvilket som helst navn, du vil, til output-SQL-dumpfilen, her har du været dump.sql .

Hele data, tabeller, strukturer og database for databasenavn vil blive sikkerhedskopieret til en SQL-tekstfil med navnet dump.sql med ovenstående kommando.

Sådan eksporteres kun en MySQL- eller MariaDB-databasestruktur

Hvis du ikke længere har brug for dataene i databasens tabeller (usandsynligt), skal du blot tilføje –ingen data skifte til kun at eksportere tabellernes strukturer. For eksempel er syntaksen:

mysqldump -u username -ppassword --no-data database_name > dump.sql

Sådan sikkerhedskopieres kun data fra en MySQL- eller MariaDB-database

Hvis du kun ønsker, at dataene skal sikkerhedskopieres, skal du bruge –no-create-info mulighed. Med denne indstilling vil dumpet ikke genskabe databasen, tabellerne, felterne og andre strukturer ved import. Brug kun dette, hvis du er ret sikker på, at du har en dubletdatabase med samme struktur, hvor du kun behøver at opdatere dataene.

mysqldump -u username -ppassword --no-create-info database_name > dump.sql

Sådan dumper du flere MySQL- eller MariaDB-databaser i tekstfil

–databaser mulighed giver dig mulighed for at angive mere end 1 database. Eksempel på syntaks:

mysqldump -u username -ppassword --databases db_name1 [db_name2 ...] > dump.sql

Sådan dumper du alle databaser i MySQL eller MariaDB Server

For at dumpe alle databaser skal du bruge –alle-databaserne mulighed, og der skal ikke længere angives databasenavn.

mysqldump -u username -ppassword --all-databases > dump.sql

Sådan sikkerhedskopieres InnoDB-tabeller online

Sikkerhedskopier databasen uundgåelig årsag til, at MySQL- eller MariaDB-serveren er utilgængelig for applikationer, fordi alle tabeller ved eksport fik en global læselås ved hjælp af FLUSH TABLES WITH READ LOCK i begyndelsen af ​​dumpet indtil slut. Så selvom READ-sætninger kan fortsætte, bliver alle INSERT-, UPDATE- og DELETE-sætninger nødt til at stå i kø på grund af låste tabeller, som om MySQL eller MariaDB er nede eller gået i stå. Hvis du bruger InnoDB, –single-transaction er måden at minimere denne låsetid til næsten ikke-eksisterende, som om du udfører en online backup. Det virker ved at læse de binære log-koordinater, så snart låsen er erhvervet, og låsen frigives derefter straks.

Syntaks:

mysqldump -u username -ppassword  --all-databases --single-transaction > dump.sql

Sådan gendannes og importeres MySQL- eller MariaDB-database

Du kan gendanne fra phpMyAdmin ved at bruge fanen Importer. For en hurtigere måde, upload dump-filen til MySQL- eller MariaDB-serveren og brug følgende kommando til at importere databaserne tilbage til MySQL- eller MariaDB-serveren.

mysql -u username -ppassword database_name < dump.sql
Hvis du vil oprette forbindelse til MySQL- eller MariaDB-servere eksternt på en anden server, skal du tilføje -h server-navn-eller-IP-adresse til kommandoen.

Import og eksport af MySQL- eller MariaDB-database er ikke kun vigtig for at gendanne dataene, når katastrofen rammer, men giver også en nem måde at migrere eller flytte til en anden server, såsom når du skifter webhostingudbyder. Bemærk dog, at et almindeligt problem - tegnsætkodning. Nyere udgave af mysqldump bruger UTF8 som standardtegnsæt, hvis intet er angivet, mens ældre versioner (typisk ældre end 4.1) bruger Latin1 som standardtegnsæt. Hvis dit databasetegnsæt er Latin1 og dumper i UTF8-sortering, kan dataene ende op med at blive vrøvl, forvanskede eller ulæselige (skeder ofte med WordPress-blog). I dette tilfælde skal du bruge –default-character-set=charset_name mulighed for at angive tegnsættet eller konvertere databasen til UTF8.


  1. Hvordan bruger man en fremmednøgle i sqlite?

  2. Gruppering registrerer time for time eller dag for dag og udfylder huller med nul eller nul

  3. EXEC sp_executesql med flere parametre

  4. MYSQLi-fejl:Brugeren har allerede mere end 'max_user_connections' aktive forbindelser