You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#!/bin/bash
usage="$exname [--host HOST] [DATABASE...]"
DBS=() host= while [ "$1" ]; do case "$1" in "--help"|"-h") echo "$usage" >&2 exit 0 ;; "--host") host="$2" shift ;; *) DBS+=("$1") ;; esac shift done
mysql_opts=() if [ "$host" ]; then mysql_opts+=(-h "$host") fi
m() { mysql "${mysql_opts[@]}" -Bs "$@" }
md() { mysqldump "${mysql_opts[@]}" "$@" }
mysql_databases() { echo "SHOW DATABASES" | m }
mysql_tables() { local db="$1" echo "SHOW TABLES" | m "$db" }
if [ "${#DBS[@]}" == 0 ]; then DBS=($(mysql_databases)) || exit 1 fi
mkdir -p /var/backups/mysql
for db in "${DBS[@]}"; do if [[ "$db" == "information_schema" || "$db" == "performance_schema" || "$db" == "mysql" ]]; then continue fi echo "Dumping database $db..." >&2 # omitting all the rotation logic dst=/"var/backups/mysql/$db" [ -d "$dst.old" ] && rm -rf "$dst.old" [ -d "$dst" ] && mv "$dst" "$dst.old" mkdir -p "$dst.inprogress" (( start = SECONDS )) md "$db" --routines --no-data --add-drop-database --database "$db" | gzip --rsyncable > "$dst.inprogress/00-schema.sql.gz" tables=$(mysql_tables "$db") for table in $tables; do backup_file="$dst.inprogress/${table}.sql.gz" echo " Dumping $table into ${backup_file}" md "$db" "$table" | gzip --rsyncable > "$backup_file" || break done mv "$dst.inprogress" "$dst" [ -d "$dst.old" ] && rm -rf "$dst.old" (( elapsed = SECONDS - start )) echo " ..dumped $db to $dst ($(du -sh "$dst" | cut -f 1) in ${elapsed}s)" >&2 done
|