Code: Alles auswählen
#!/bin/bash
DB_USER="Backup" #Erforderliche DB-Rechte: SELECT, PROCESS, SHOW DATABASES, LOCK TABLES, EVENT, SHOW VIEW, EXECUTE
DB_PASSWD="geheim"
DUMPPATH=/private-backup/srv/mysqldump/
DATABASES=($(mysql --user=${DB_USER} --password=${DB_PASSWD} --execute="SHOW DATABASES")) # Alle vorhandenen DBs ermitteln und in ein Array überführen.
MYSQL_OPTS=""
if ! [ -d ${DUMPPATH} ]; then mkdir -p ${DUMPPATH}; fi
for ((i=1;i<${#DATABASES[@]};i+=1)); do
if [ ${DATABASES[$i]} == "information_schema" ]; then MYSQL_OPTS="--skip-lock-tables"; fi
if [ ${DATABASES[$i]} == "mysql" ]; then MYSQL_OPTS="--events"; fi
if [ ${DATABASES[$i]} == "performance_schema" ]; then MYSQL_OPTS="--skip-lock-tables"; fi
mkfifo ${DUMPPATH}pipe_mysqldump
gzip -9 -c < ${DUMPPATH}pipe_mysqldump > ${DUMPPATH}${DATABASES[${i}]}.gz &
mysqldump --opt --routines --triggers --user=${DB_USER} --password=${DB_PASSWD} --databases ${DATABASES[${i}]} ${MYSQL_OPTS} > ${DUMPPATH}pipe_mysqldump
rm ${DUMPPATH}pipe_mysqldump
MYSQL_OPTS=""
done