mysql是bsd协议吗_freebsd下实现mysql的自动备份

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

比如,刚刚发生了如下事情:

有一测试系统,历史的任务是完成上线前的最后一次测试,然后:

A 为了给客户演示系统的使用方法,在此系统上添加了大量的供演示用的支撑数据。

B 为了删除生产环境下冗余数据,用生产环境下的数据覆盖了测试的数据。

导致:

A很无奈:覆盖数据前竟然不和我打招呼!

B很无辜:测试系统不就是用来测试而可以随时覆盖的吗?

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

脚本

#!/usr/local/bin/bash`

# 注意:liunx 系统请将上一行修改为:!/bin/bash

# 备份数据库脚本

# 设置变量

MyUSER="用户名。建议单独建立个用户,给查询权限,防止权限问题" # DB_USERNAME

MyPASS="密码" # DB_PASSWORD

MyHOST="主机名" # DB_HOSTNAME

Port="端口号" # 例3306

# 设置备份路径(该路径必须存在,且可写)

DEST="/请使用实际的绝对路径" # 比如:/home/username/backups/DB

# 接收通知的邮件

EMAIL="3792535@qq.com"

# 备份保留天数

DAYS=8

# 查找mysql、MYSQLDUMP、GZIP的位置 (该脚本依赖于GZIP,如果没有安装的话,先安装)

MYSQL="/usr/local/bin/mysql"

MYSQLDUMP="/usr/local/bin/mysqldump"

GZIP="/usr/bin/gzip"

# liunx系统请替换为(注意去除注释)

# MYSQL="$(which mysql)"

# MYSQLDUMP="$(which mysqldump)"

# GZIP="$(which gzip)"

# 以 年-月-日 的格式来获取当前日期

NOW="$(date +"%Y-%m-%d_%s")"

# 创建备份文件夹 目标文件夹/时间/mysql

MBD="$DEST/$NOW/mysql"

install -d $MBD

# 需要备份的数据表

SKIP="schedule

measurement"

# 获取所有的数据表

DBS="$($MYSQL -h $MyHOST -u $MyUSER -p$MyPASS -P $Port -Bse 'show databases')"

# 备份数据表

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

# 压缩、归档,发送邮件通知

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

# 删除历史的冗余备份文件

find $DEST -mtime +$DAYS -exec rm -f {} \;

使用方法

将上面的代码保存为sqlbak.sh -> 在sqlbak.sh的同级目录下,执行bash sqlbak.sh。执行后将在目录文件夹中生成如下文件:

2019-07-02_1562042395.tar.gz

即为备份文件

恢复备份

备份经过了1次打包(tar),一次压缩(gzip)。在使用时,先进行解压,再解包。

# gzip -d 2019-07-02_1562042395.tar.gz

# ls

2019-07-02_1562042395.tar

# tar -zxvf 2019-07-02_1562042395.tar

# ls

x 2019-07-02_1562042395/

x 2019-07-02_1562042395/mysql/

x 2019-07-02_1562042395/mysql/schedule.sql

x 2019-07-02_1562042395/mysql/measurement.sql

有了sql文件,恢复相信不成问题了吧。

FREEBSD定时任务

为sqlbak.sh加入执行权限

chmod +x sqlbak.sh

设置定时任务

% crontab -e

如果是初次使用,请加入以下信息:

SHELL=/usr/local/bin/bash

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

# Order of crontab fields

# minute hour mday month wday command

然后,加入我们需要执行的sh脚本,以及设置执行的时间。假设我每天晚上4:38执行一次。

SHELL=/usr/local/bin/bash

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin

# Order of crontab fields

# minute hour mday month wday command

38 4 * * * /mengyunzhi/databak/sqlbak.sh

其中:/mengyunzhi/databak/sqlbak.sh为脚本的绝对路径。

加入后,我们需要使用以下命令测试自己的脚本在执行自动任务时是否出错:

env -i SHELL=/usr/local/bin/bash PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/panjie LOGNAME=panjie /mengyunzhi/databak/sqlbak.sh

HOME=/home/panjie LOGNAME=panjie中的panjie应该分别设置为自己用户的路径及用户名。

执行后如果发现错误信息,请参考修正。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值