Create a script like this to mysqldump all databases in parallel
DBLIST=`mysql -uroot -pPASSWORD -ANe"SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','performance_schema')" | sed 's/,/ /g'` MYSQLDUMP_OPTIONS="-uroot -pPASSWORD --single-transaction --routines --triggers" BACKUP_DEST=/home/backup/db/`date +\%G-\%m-\%d` mkdir ${BACKUP_DEST} for DB in `echo "${DBLIST}"` do mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip > ${BACKUP_DEST}/${DB}.sql.gz & done wait
Then place this script in the crontab
If there are way too many databases, you could dump 5 at a time like this
DBLIST=`mysql -uroot -pPASSWORD -ANe"SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','performance_schema')" | sed 's/,/ /g'` MYSQLDUMP_OPTIONS="-uroot -pPASSWORD --single-transaction --routines --triggers" BACKUP_DEST=/home/backup/db/`date +\%G-\%m-\%d` mkdir ${BACKUP_DEST} COMMIT_COUNT=0 COMMIT_LIMIT=5 for DB in `echo "${DBLIST}"` do mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip > ${BACKUP_DEST}/${DB}.sql.gz & (( COMMIT_COUNT++ )) if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ] then COMMIT_COUNT=0 wait fi done if [ ${COMMIT_COUNT} -gt 0 ] then wait fi
You can then add the tar commands to the script