Importera och exportera stora MySQL databaser

Behövde importera en stor databas i MySQL och fördjupade mig i ämnet.
Hittade en utmärkt guide som inspirerade till texten nedan.

Om du har en databasfil som är större än 2Mb kan inte phpMyAdmin hjälpa dig med importen.
Du kan då använda till exempel MySQL workbench eller skriva kommandon i ett terminalfönster.

Använder du en Mac är Sequel Pro väldigt bra.

Backup av databas

Om du vill ta en kopia av en databas gör du så här:

Backupen blir en textfil med SQL-kommandon.

mysqldump -u [USERNAME] -p [DBNAME] | gzip > [/path_to_file/DBNAME].sql.gz

Import av backup

Packa upp

Om din backupfil är packad måste den först packas upp.
gzip -d [/path_to_file/DBNAME].sql.gz

MySQL kommandoläge

I mysql kommandoläge kan du skriva valfria sql-uttryck och de skickas till din mysql-server.

mysql -u [USERNAME] -p

Ta bort gammal databas

Tänker du återställa en kopia över en gammal version som redan finns i mysql, då behöver du ta bort den gamla databasen först.
SHOW DATABASES;
DROP DATABASE [DBNAME];

Import

Nu till själva importen av databasfilen:
CREATE DATABASE [DBNAME];
USE [DBNAME];
SOURCE [/path_to_file/DBNAME].sql;

Extra stora databaser

Om din databas är ännu större än 1 Gb kan det ta en väldig tid att importera.
Du kan snabba upp importen genom att lägga till två rader i filen my.cnf och starta om mysql. Tänk på att ta bort raderna efter importen.
[mysqld]
# Performance settings used for import.
delay_key_write=ALL
bulk_insert_buffer_size=256M

Import i en enda rad

Hela importen kan minskas ned till en enda rad:
gunzip dump.sql.gz | mysql -u[USER] -p[PASS] [DBNAME]

Import utan att skapa fil

Det går att packa upp databasfilen och skicka det uppackade datat som en ström till importen.

Du behöver därmed inte skapa en uppackad fil först.
gunzip < [/path_to_file/DBNAME].sql.gz | mysql -u [USERNAME] -p [DBNAME]

Bäst kompression

För att få den bästa kompressionen på databasbackupen kan du skriva detta:

mysqldump -u[USER] -p[PASS] [DBNAME] | bzip2 –best > [DBNAME].sql.bz2

och för importen blir det då:

bunzip2 [DBNAME].sql.bz2 | mysql -u[USER] -p[PASS] [DBNAME]

Andra sätt

MySQL-dumper är ett verktyg för att ta backup av stora databaser när de ligger på en publik hemsida och du inte har tillgång till ett terminalfönster.
Den har också ett smart sätt att komma bort från begränsningen med 30 sekunders exekveringstid som kan finnas på hostade webservrar. Hemsidan finns dessutom på svenska.