sql >> Databasteknik >  >> RDS >> Mysql

Hur man säkerhetskopierar och återställer (exportera och importerar) MySQL-databaser

phpMyAdmin kan användas för att enkelt exportera eller säkerhetskopiera MySQL- eller MariaDB-databaser. Men om databasstorleken är mycket stor är det förmodligen inte en bra idé. phpMyAdmin tillåter användare att spara databasdump som fil eller visning på skärmen, vilket innebär att exportera SQL-satser från servern och överföra data över långsammare nätverksanslutning eller Internet till användarens dator. Denna process saktar ner exportprocessen, ökar databasens låsningstid och därmed MySQL eller MariaDB otillgänglighet, saktar ner servern och kan helt enkelt krascha Apache HTTPD-servern om för många inkommande webbanslutningar stör systemets resurser.

Det bättre sättet att säkerhetskopiera och exportera MySQL- eller MariaDB-databas är att göra uppgiften lokalt på servern, så att tabellernas data omedelbart kan dumpas på den lokala disken utan fördröjning. Exporthastigheten blir alltså snabbare och minskar tiden MySQL- eller MariaDB-databasen eller tabellen är låst för åtkomst. Denna handledning är guiden för hur man säkerhetskopierar (exporterar) och återställer (importerar) MySQL- eller MariaDB-databas(er) på själva databasservern genom att använda mysqldump och mysql verktyg. Det finns i princip två sätt att säkerhetskopiera MySQL eller MariaDB , den ena är genom att kopiera alla tabellfiler (*.frm-, *.MYD- och *.MYI-filer) eller genom att använda mysqlhotcopy verktyget, men det fungerar bara för MyISAM-tabeller. Handledningen nedan kommer att koncentrera sig på mysqldump som fungerar för både MyISAM- och InnoDB-tabeller.

Hur man exporterar eller säkerhetskopierar eller dumpar en MySQL- eller MariaDB-databas

För att exportera en MySQL- eller MariaDB-databas till en dumpfil, skriv helt enkelt följande kommandosyntax i skalet. Du kan använda Telnet eller SSH för att fjärrlogga in på maskinen om du inte har tillgång till den fysiska lådan.

mysqldump -u username -ppassword database_name > dump.sql

Ersätt användarnamn med ett giltigt MySQL- eller MariaDB-användar-ID, lösenord med det giltiga lösenordet för användaren (VIKTIGT:inget mellanslag efter -p och lösenordet, annars kommer mysqldump att uppmana dig att ange lösenord men kommer att behandla lösenordet som databasnamn, så säkerhetskopieringen kommer att misslyckas) och database_name med det faktiska namnet på databasen du vill exportera. Slutligen kan du ange vilket namn du vill för utdata-SQL-dumpfilen, här var dump.sql .

Hela datan, tabellerna, strukturerna och databasen för databasnamn kommer att säkerhetskopieras till en SQL-textfil med namnet dump.sql med kommandot ovan.

Hur man exporterar endast en MySQL- eller MariaDB-databasstruktur

Om du inte längre behöver data i databasens tabeller (osannolikt), lägg helt enkelt till –no-data växla till att endast exportera tabellernas strukturer. Syntaxen är till exempel:

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

Hur man endast säkerhetskopierar data från en MySQL- eller MariaDB-databas

Om du bara vill att data ska säkerhetskopieras, använd –no-create-info alternativ. Med den här inställningen kommer dumpen inte att återskapa databasen, tabellerna, fälten och andra strukturer vid import. Använd detta endast om du är ganska säker på att du har en dubblett av databaser med samma struktur, där du bara behöver uppdatera data.

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

Hur du dumpar flera MySQL- eller MariaDB-databaser i textfil

–databaser alternativet låter dig ange mer än 1 databas. Exempel syntax:

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

Hur du dumpar alla databaser i MySQL eller MariaDB Server

För att dumpa alla databaser, använd –all-databases alternativet, och inga databasers namn behöver anges längre.

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

Hur man säkerhetskopierar InnoDB-tabeller online

Säkerhetskopiera databasen oundviklig orsak till att MySQL- eller MariaDB-servern inte är tillgänglig för applikationer eftersom alla tabeller vid export fick ett globalt läslås genom att använda FLUSH TABLES WITH READ LOCK i början av dumpningen tills slut. Så även om READ-satser kan fortsätta, kommer alla INSERT-, UPDATE- och DELETE-satser att behöva stå i kö på grund av låsta tabeller, som om MySQL eller MariaDB är nere eller har stannat. Om du använder InnoDB, –single-transaction är sättet att minimera denna låsningstid till nästan obefintlig som om du utförde en online backup. Det fungerar genom att läsa de binära loggkoordinaterna så snart låset har förvärvats, och låset släpps sedan omedelbart.

Syntax:

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

Hur man återställer och importerar MySQL- eller MariaDB-databas

Du kan återställa från phpMyAdmin med hjälp av fliken Import. För snabbare sätt, ladda upp dumpfilen till MySQL- eller MariaDB-servern och använd följande kommando för att importera databaserna tillbaka till MySQL- eller MariaDB-servern.

mysql -u username -ppassword database_name < dump.sql
Om du vill ansluta till MySQL- eller MariaDB-servrar på distans på en annan server, lägg till -h server-namn-eller-IP-adress till kommandot.

Import och export av MySQL- eller MariaDB-databas är inte bara viktigt för att återställa data när en katastrof inträffar, utan ger också ett enkelt sätt att migrera eller flytta till en annan server, till exempel när du byter webbhotellleverantör. Observera dock att ett vanligt problem – teckenuppsättningskodning. Nyare version av mysqldump använder UTF8 som standardteckenuppsättning om inget anges, medan äldre versioner (typiskt äldre än 4.1) använder Latin1 som standardteckenuppsättning. Om din databasteckenuppsättning är Latin1 och dumpar i UTF8-kollation, kan data bara bli skräp, förvrängd eller oläslig (händer ofta med WordPress-bloggen). Om så är fallet, använd –default-character-set=charset_name alternativ för att ange teckenuppsättningen eller konvertera databasen till UTF8.


  1. MySQL select-sats med CASE eller IF ELSEIF? Inte säker på hur man får resultatet

  2. Anslut till fjärrpostgresql-server på amazon ec2

  3. mySQL konvertera varchar till datum

  4. oracle autoincrement med sekvens och trigger fungerar inte korrekt