天天看点

Linux脚本备份远程数据库或者本地数据库

此类文章网上太多,脚本也都是大神写的,我只是借用。主要是把一些坑填起来个大家分享下,减少琢磨的时间。

1.vi  /usr/local/script/BackupDatabase  第一步执行命令创建备份脚本,注意点:  mkdir /usr/local/script/   先自行创建文件夹,他不会自己递归创建文件夹的。

2.编辑脚本文件

#!/bin/bash

#Shell Command For Backup MySQL Database Everyday Automatically By Crontab 

#time 2018-09-15 

#name huxianglin

    HOST=127.0.0.1

    USER=root

    PASSWORD=14\!\[email protected]#2

    DATABASE1=test

    BACKUP_DIR=/data/backup/database/  #备份数据库文件的路径

    LOGFILE=/data/backup/database/data_backup.log    #备份数据库脚本的日志文件

    DATE=`date +%Y%m%d-%H%M -d -3minute`     #获取当前系统时间-3分钟

    DUMPFILE1=$DATE-test.sql                #需要备份的数据库名称

    ARCHIVE1=$DUMPFILE1-tar.gz                #备份的数据库压缩后的名称

    if [ ! -d $BACKUP_DIR ];                 #判断备份路径是否存在,若不存在则创建该路径

    then 

    mkdir -p "$BACKUP_DIR"

    fi 

    echo -e "\n" >> $LOGFILE   

    echo "------------------------------------" >> $LOGFILE 

    echo "BACKUP DATE:$DATE">> $LOGFILE 

    echo "------------------------------------" >> $LOGFILE 

    cd $BACKUP_DIR                           #跳到备份路径下

    /usr/bin/mysqldump -h$HOST -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1    #使用mysqldump备份数据库

    if [[ $? == 0 ]]; then

    tar czvf $ARCHIVE1 $DUMPFILE1 >> $LOGFILE 2>&1                               #判断是否备份成功,若备份成功,则压缩备份数据库,否则将错误日志写入日志文件中去。

    echo "$ARCHIVE1 BACKUP SUCCESSFUL!" >> $LOGFILE 

    rm -f $DUMPFILE1

    else 

    echo “$ARCHIVE1 Backup Fail!” >> $LOGFILE 

    fi

注意点:HOST 为数据库远程地址,首先得有远程访问权限。如果备份是本机数据库

命令 /usr/bin/mysqldump -h$HOST -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1

改写/usr/bin/mysqldump -u$USER -p$PASSWORD $DATABASE1 > $DUMPFILE1

注意点: /usr/bin/mysqldump 为mysqldump命令所在路径,可以先find / -name mysqldump 查找出来位置

注意点:如果你报了mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect  那么检查下密码,自己写错了不是我要说的,我要说的是像有!这样的字符需要转义 \!

3.编写自动删除备份脚本,为了防止文件一直生成占用硬盘空间,不影响备份流程,可以不写。

vi /usr/local/script/CleanDatabase

#!/bin/bash 

#time 2015-05-21 

#name huxianglin 

BACKUPDIR=/data/backup/database/                                    #定义备份文件路径 

KEEPTIME=7                                                             #定义需要删除的文件距离当前的天数 

DELFILE=`find $BACKUPDIR -type f -mtime +$KEEPTIME -exec ls {} \;`     #找到天数大于7天的文件 

for delfile in ${DELFILE}                                              #循环删除满足天数大于七天的文件 

do 

rm -f $delfile 

done 

这个自己根据需要写多少天过期就好了

4.当然不可能自己手动执行这些脚本,写入系统定时任务里面去

vi /etc/crontab

SHELL=/bin/bash

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

MAILTO=root

HOME=/

# For details see man 4 crontabs

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

00 * * * * root /usr/local/script/BackupDatabase              #定义每天没小时执行备份数据库脚本 

02 00 * * 0 root /usr/local/script/CleanDatabase               #定义每周日凌晨0点02分执行删除数据库备份文件 

5.第五步也是最关键一步。请给备份脚本可执行权限

chmod +x /usr/local/script/BackupDatabase

chmod +x /usr/local/script/CleanDatabase

当然成功后附上一条查看本目录下文件以及大小命令 ls -lht

到此全部搞定

继续阅读