乐趣区

freebsd下实现mysql的自动备份

沟通很重要,沟通的渠道很重要。当团队需要配合的时候,要想办法将自己当下做的事情,以最有效的方式通知给团队其它成员,以避免不必要的伤害。

比如,刚刚发生了如下事情:
有一测试系统,历史的任务是完成上线前的最后一次测试,然后:
A 为了客户演示系统的使用,在此系统上添加了大量的供演示用的支撑数据。
B 为了删除生产环境下冗余数据,用生产环境下的数据覆盖了测试的数据。

导致:
A 很无奈:覆盖数据前竟然不和我打招呼!
B 很无辜:测试系统不就是用来测试而可以随时覆盖的吗?

以上是闲谈,如果我们每日都对数据进行备份呢?是不是就可以解决 A、B 两个人的问题?

脚本

#!/bin/bash
# 

# Set these variables
MyUSER=""    # DB_USERNAME
MyPASS=""    # DB_PASSWORD
MyHOST=""    # DB_HOSTNAME

# Backup Dest directory
DEST="" # /home/username/backups/DB

# Email for notifications
EMAIL=""

# How many days old files must be to be removed
DAYS=3

# Linux bin paths
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

# Get date in dd-mm-yyyy format
NOW="$(date +"%d-%m-%Y_%s")"

# Create Backup sub-directories
MBD="$DEST/$NOW/mysql"
install -d $MBD

# DB skip list
SKIP="information_schema
another_one_db"

# Get all databases
DBS="$($MYSQL -h $MyHOST -u $MyUSER -p$MyPASS -Bse'show databases')"

# Archive database dumps
for db in $DBS
do
    skipdb=-1
    if ["$SKIP" != ""];
    then
        for i in $SKIP
        do
            ["$db" == "$i"] && skipdb=1 || :
        done
    fi
 
    if ["$skipdb" == "-1"] ; then
        FILE="$MBD/$db.sql"
    $MYSQLDUMP -h $MyHOST -u $MyUSER -p$MyPASS $db > $FILE
    fi
done

# Archive the directory, send mail and cleanup
cd $DEST
tar -cf $NOW.tar $NOW
$GZIP -9 $NOW.tar

echo "MySQL backup is completed! Backup name is $NOW.tar.gz" | mail -s "MySQL backup" $EMAIL
rm -rf $NOW

# Remove old files
find $DEST -mtime +$DAYS -exec rm -f {} \;
退出移动版