Difference between revisions of "MySQL dump til backup"

From HoerupWiki
Jump to: navigation, search
(Created page with "''- en del af Tommys Backup Projekt'' ==MySQL dump== Det er i sig selv ikke svært at benytte '''mysqldump''', det er en simpel kommando: mysqldump -u root -p database > da...")
 
(Forberedelse)
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
''- en del af [[Tommys Backup Projekt]]''
 
''- en del af [[Tommys Backup Projekt]]''
  
==MySQL dump==
+
==Indledning==
 
Det er i sig selv ikke svært at benytte '''mysqldump''', det er en simpel kommando:
 
Det er i sig selv ikke svært at benytte '''mysqldump''', det er en simpel kommando:
 
  mysqldump -u root -p database > database.sql
 
  mysqldump -u root -p database > database.sql
 +
 +
Det fungere også fint som backup for de fleste, men da jeg i mit projekt vil lave versions-backup, hvor jeg kun gemmer de filer der har ændret sig, er det upraktisk at have hele databassen i een fil, hvis der er store tabeller der sjældent afviger.
 +
 +
==Forberedelse==
 +
Før vi begynder skal vi bestemme hvor vi vil smide backuppen, i det her eksempel bruger jeg '''/root/backup/database_navn'''. Det er vigtigt at mysql-deamon har skriverettigheder til denne, så hvis denne ikke køres som root (fy!), så smid en chown eller chmod efter behov.
 +
 +
Da det samtidig skal køres fra cron midt om natten, har jeg oprettet en '''backup''' bruger fra '''localhost''' i MySQL med læse adgang til databasen. Ellers vil scriptet bare stoppe.
 +
 +
==MySQL Dump script==
 +
Jeg har lavet følgende script:
 +
#!/bin/bash
 +
BACKUP_DIR=/root/backup/database_navn
 +
 +
for TABLE in $(mysql -B -s -u database_navn -e 'use $DATABASE; show tables;')
 +
do
 +
  mysqldump -u backup database_navn $TABLE > $BACKUP_DIR/$TABLE.sql
 +
done
 +
 +
Den trækker en liste over alle tabellerne i '''database_navn''' og dumper som seperate tabeller.
 +
 +
Det kan evt. pipes til gzip :
 +
...
 +
mysqldump -u backup database_navn $TABLE | gzip > $BACKUP_DIR/$TABLE.sql.gz
 +
...
 +
Det vil dog unægtelig medføre et meget højere cpu-load, så gør det ikke i prime-time.
 +
 +
Nu mappen klar til [[Versions backup med rsync#Backup_script]]

Latest revision as of 17:50, 21 February 2013

- en del af Tommys Backup Projekt

Indledning

Det er i sig selv ikke svært at benytte mysqldump, det er en simpel kommando:

mysqldump -u root -p database > database.sql

Det fungere også fint som backup for de fleste, men da jeg i mit projekt vil lave versions-backup, hvor jeg kun gemmer de filer der har ændret sig, er det upraktisk at have hele databassen i een fil, hvis der er store tabeller der sjældent afviger.

Forberedelse

Før vi begynder skal vi bestemme hvor vi vil smide backuppen, i det her eksempel bruger jeg /root/backup/database_navn. Det er vigtigt at mysql-deamon har skriverettigheder til denne, så hvis denne ikke køres som root (fy!), så smid en chown eller chmod efter behov.

Da det samtidig skal køres fra cron midt om natten, har jeg oprettet en backup bruger fra localhost i MySQL med læse adgang til databasen. Ellers vil scriptet bare stoppe.

MySQL Dump script

Jeg har lavet følgende script:

#!/bin/bash
BACKUP_DIR=/root/backup/database_navn

for TABLE in $(mysql -B -s -u database_navn -e 'use $DATABASE; show tables;')
do
 mysqldump -u backup database_navn $TABLE > $BACKUP_DIR/$TABLE.sql
done

Den trækker en liste over alle tabellerne i database_navn og dumper som seperate tabeller.

Det kan evt. pipes til gzip :

...
mysqldump -u backup database_navn $TABLE | gzip > $BACKUP_DIR/$TABLE.sql.gz
...

Det vil dog unægtelig medføre et meget højere cpu-load, så gør det ikke i prime-time.

Nu mappen klar til Versions backup med rsync#Backup_script