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.