IT星球论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 389|回复: 2

shell脚本备份mysql数据库

[复制链接]

2002

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2015-11-9 12:18:36 |显示全部楼层
shell脚本备份MySQL数据库

需求
临近年关整理一些脚本程序,发现一个mysql数据库备份的脚本可以和大家分享一下,基于环境是ubuntu10.04server
  it.agoit.com
思路
获取mysql服务器所有数据库名称,过滤掉不需要备份的数据库
通过mysqldump来for循环导出所有的数据库的sql文件
用zip加密压缩所有的sql文件
定期进行数据清理工作

shell代码

数据库导出代码
[html]
#!/bin/bash  
  
#1.数据库信息定义    it.agoit.com
mysql_host="192.168.1.1"  
mysql_user="root"  
mysql_passwd="root"  
  
#sql备份目录  
root_dir="/backup"  
back_dir="/backup/databases"  
data_dir="databases"  
store_dir="database"  
if [ ! -d $back_dir ]; then  
    mkdir -p $back_dir  
fi  
  
#备份的数据库数组  
db_arr=$(echo "show databases;" | mysql -u$mysql_user -p$mysql_passwd -h$mysql_host)  
#不需要备份的单例数据库  
nodeldb="test1"  
  
#当前日期  
date=$(date -d '+0 days' +%Y%m%d)  
  
#zip打包密码  
zippasswd="passwd"  
zipname="lczh_"$date".zip"  
  
#2.进入到备份目录  
cd $back_dir  
  
#3.循环备份  
for dbname in ${db_arr}  
do  
    if [ $dbname != $nodeldb ]; then  
        sqlfile=$dbname-$date".sql"  
        mysqldump -u$mysql_user -p$mysql_passwd -h$mysql_host $dbname >$sqlfile  
    fi  
done  
  
#4.tar打包所有的sql文件  
tar -zcPpf $root_dir/$store_dir/$zipname --directory /  $root_dir/$data_dir  
#打包成功后删除sql文件  
if [ $? = 0 ]; then  
    rm -r $data_dir  
fi  

数据定期清理脚本

作用
定期清理14天前的备份文件

shell代码
[html]
#!/bin/bash -   
  
#1.参数配置  
  
#mysql文件备份目录  
backup_dir1="/backup/test1/"  
backup_dir2="/backup/test2/"  
backdir_arr=($backup_dir1 $backup_dir2)  
  
#过期文件的时间    it.agoit.com
keep_time=14  
  
#当前所在星期,crontab在奇数的星期7执行  
week=$(date +%W)  
flag=`expr $week % 2`  
  
#2.清理过期文件,只在奇数星期7执行  
if [ $flag -eq 1 ]; then  
    for dir in ${backdir_arr
  • }  
        do  
            if [ -d $dir ]; then  
                #查找14天之外的文件数据  
                clean_arr=`find $dir -type f -mtime +$keep_time -exec ls {} \;`  
                for cleanfile in ${clean_arr}  
                do  
                    rm $cleanfile  
                done  
            fi  
        done  
    fi  

    crontab配置
    [html]
    0 5 * * 7  执行清理脚本  

    后记  it.agoit.com
    大家有更好的数据库备份方法或者是指点我shell脚本的不足,都可以跟帖留言,我保证回复,一起加油!
    摘自:http://www.2cto.com/database/201302/187846.html

  • 该会员没有填写今日想说内容.

    2002

    主题

    1

    好友

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

    发表于 2015-11-9 12:19:29 |显示全部楼层
    整理后的备份Shell脚本为:
    1. #!/bin/bash

    2. # 数据库信息定义
    3. mysql_host="127.0.0.1"
    4. mysql_user="root"
    5. mysql_passwd="00Small"

    6. # sql备份目录

    7. root_dir="/iss/db_bak"
    8. back_dir="/iss/db_bak/databases"
    9. data_dir="databases"
    10. store_dir="database"
    11. if [ ! -d $back_dir ]; then
    12.     mkdir -p $back_dir
    13. fi

    14. #备份的数据库数组
    15. db_arr=$(echo "show databases;" | mysql -u$mysql_user -p$mysql_passwd -h$mysql_host)
    16. #不需要备份的单例数据库
    17. nodeldb="test"
    18. #当前日期
    19. date=$(date -d '+0 days' +%Y%m%d)

    20. #zip打包密码
    21. zippasswd=""
    22. zipname="db_"$date".zip"

    23. #进入到备份目录
    24. cd $back_dir

    25. #循环备份
    26. for dbname in ${db_arr}
    27. do
    28.     if [ $dbname != $nodeldb ]; then
    29.         sqlfile=$dbname-$date".sql"
    30.         mysqldump -u$mysql_user -p$mysql_passwd -h$mysql_host $dbname >$sqlfile
    31.     fi
    32. done

    33. #tar打包所有的sql文件
    34. tar -zcPpf $root_dir/$store_dir/$zipname --directory /  $root_dir/$data_dir
    35. #打包成功后删除sql文件
    36. if [ $? = 0 ]; then
    37.     rm -r $data_dir
    38. fi
    复制代码
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    2002

    主题

    1

    好友

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

    发表于 2015-11-9 12:20:39 |显示全部楼层
    清备备份shell脚本为:
    1. #!/bin/bash -

    2. # 参数配置

    3. #mysql文件备份目录
    4. backup_dir1="/iss/db_bak/databases"
    5. backup_dir2="/iss/db_bak/databases"
    6. backdir_arr=($backup_dir1 $backup_dir2)

    7. #过期文件的时间
    8. keep_time=14

    9. #当前所在星期,crontab在奇数的星期7执行
    10. week=$(date +%W)
    11. flag=`expr $week % 2`

    12. #清理过期文件,只在奇数星期7执行
    13. if [ $flag -eq 1 ]; then
    14.     for dir in ${backdir_arr[*]}
    15.     do
    16.         if [ -d $dir ]; then
    17.             #查找14天之外的文件数据
    18.             clean_arr=`find $dir -type f -mtime +$keep_time -exec ls {} \;`
    19.             for cleanfile in ${clean_arr}
    20.             do
    21.                 rm $cleanfile
    22.             done
    23.         fi
    24.     done
    25. fi

    26. #crontab中加入  0 5 * * 7  执行清理脚本
    复制代码
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

    回顶部