Er zijn natuurlijk tig manier om mbv mysqldump een backup te maken, hier mijn versie.
Deze dump niet alle databases naar 1 file, maar iedere db naar een aparte.
Das wel zo handig als je maar 1 db moet restoren.
Hier draait ook een database van onze zoek machine. Die is vrij groot (enkele miljoenen records) maar de data is niet belangrijk, aangezien dit snachts opnieuw geindexed wordt. Daarom wordt van die db alleen de structuur gebackupped.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #!/bin/bash
#
# Dick Visser <dick@tienhuis.nl>
#
# mysqldump can dump all databases, but then you end up with
# one possibly huge dump; restoring a single database is not possible.
# This script dumps all MySQL database seperately, so restoration of
# a single database is much easier.
# It also add statements to add and drop the database.
# Also, you can choose to not dump certains databases, because they
# contain non-important or volatile data (f.i. search-engine data).
BackupDir=/var/lib/mysqlbackup/mysql
passwd="geheim"
date=`date +%Y-%m-%d-%a-%H:%M:%S`
#########################################################################
## Switch to backup directory and confirm
#########################################################################
cd $BackupDir
rm -f *sql
[ $? -ne 0 ] && echo "Backup directory ($BackupDir) not found. Dump canceled." && exit
########################################################################
## Dump all databases
#########################################################################
for db in $(mysql -p$passwd -e 'show databases;' | egrep -v \(^Database$\|mnogosearch\));
do
echo -ne "--\n-- Custom dumps\n-- Dick Visser <dick@tienhuis.nl>\n-- Generated at $date\n--\n" > $db.sql
echo -ne "CREATE DATABASE /*!32312 IF NOT EXISTS*/ $db;\nUSE $db;\n" >> $db.sql
mysqldump -p$passwd --add-drop-table --add-locks -aeq $db >> $db.sql
RETVAL=$?
[ $RETVAL -ne 0 ] && echo " [FAILED]" && Failed=1
done
# Mnogosearch database only schema - NO DATA
mysqldump -p$passwd --add-drop-table --add-locks -aeqd mnogosearch >> mnogosearch.sql |
Om te restore kun je simpelweg
mysql < dbname.sql doen.
Als je de hele zooi wilt restoren (bv machine gecrashed, of je wilt een kloon maken), dan moet je beginnen met
mysql < mysql.sql want daar staan users en permissies in etc. Vervolgens restore je alles achter elkaar (behalve mysql.sql uiteraard

):
code:
1
2
3
| #!/bin/sh
# restore alles
for db in $(ls | grep -v mysql.sql); do mysql -pgeheim < $db; done |
edit:
nu ik er weer naar keek bleek er toch nog wat onzin in te staan, en bovendien miste de backup de FOREIGN_KEYS statements - zonder die dingen kunnen backups met foreign keys niet goed gerestored worden....
[
Voor 35% gewijzigd door
usr-local-dick op 30-11-2004 15:38
]