设为首页 收藏本站
查看: 1137|回复: 0

mysql备份单实例(一)shell-7928217

[复制链接]

尚未签到

发表于 2018-8-23 13:48:36 | 显示全部楼层 |阅读模式
我的博客已迁移到xdoujiang.com请去那边和我交流  
一、脚本说明
  
1、需要备份2个库(mysqltest1 mysqltest)
  
2、开启4个进程
  
3、可以选择进行备份不压缩和备份压缩
  
4、可以对不需要的数据库剔除
  
5、backup用户在数据库里的权限
  
grant select,reload,super,lock tables,create view,show view on *.* to 'backup'@'localhost' identified by 'backup';
  
flush privileges;
  
6、计划任务
  
00 00 * * * cd /opt/dbbak && bash mysqlback.sh mysqlbackupconf >> /opt/dbbak/dbbackup.log 2>&1
  
7、会删除三天前的binlog
  
8、mysql版本5.5的
  
9、debian7.4 (3.2.54-2 x86_64)
  

  
二、具体脚本如下
  
cat mysqlback.sh
  
#!/bin/bash
  
#--------------------------------------------------
  
#Author:jimmygong
  
#Email:jimmygong@taomee.com
  
#FileName:mysqlback.sh
  
#Function:
  
#Version:1.0
  
#Created:2015-06-29
  
#--------------------------------------------------
  
if [[ $# -ne 1 ]]
  
then
  
    echo -e "Usage:$0 mysqlbackupconf"
  
    exit 1
  
else
  
    config=$1
  
    if [[ ! -f $config ]]
  
    then
  
        echo -e "Usage:$0 mysqlbackupconf"
  
        exit 1
  
    fi
  
fi
  
source $config
  
dbname=""
  
currdate=$(date +%Y%m%d)
  
haveinnodb=0
  
localip=$(ifconfig eth0|awk '/inet addr:/'|awk -F: '{print $2}'|awk -F" " '{print $1}')
  
function purgebinlog ()
  
{
  
    purdate=`date "+%F %T" --date='3 day ago'`
  
    pur="purge master logs before '$purdate'"
  
    echo "$pur"|mysql -u"$dbuser" -p"$dbpass"
  
}
  
function redirectlog ()
  
{
  
    logfile=$logdir/${currdate}_${localip}_log
  
    mkdir -p $logdir
  
    exec 1>$logfile
  
    exec 2>$logfile
  
}
  
function checkdestdir ()
  
{
  
    destdir=$destdir/$currdate
  
    if [[ ! -d $destdir ]]
  
    then
  
        mkdir -p $destdir
  
    fi
  
}
  
function runcommand ()
  
{
  
    comm=$1
  
    mysql -u"$dbuser" -p"$dbpass" -sNe "$comm"
  
}
  
function generateschema ()
  
{
  
    i=0
  
    result=`runcommand 'show databases'`
  
    for db in $result
  
    do
  
        rv=`echo $exclude|grep -w -i $db`
  
        if [[ -n "$rv" ]]
  
        then
  
            continue;
  
        fi
  
        dbname=$db
  
        let i++
  
    done
  
}
  
function guessengine ()
  
{
  
    innodb=`runcommand 'show engines'|grep -i innodb|grep -i yes`
  
    if [[ ! -z "$innodb" ]]
  
    then
  
        haveinnodb=1
  
    fi
  
}
  
function dobackupsql ()
  
{
  
    db=$1
  
    destname=$destdir/$db.sql
  
    if [[ $haveinnodb -eq 1 ]]
  
    then
  
        dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --single-transaction --databases"
  
    else
  
        dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --databases"
  
    fi
  
    $dumpcomm $db > $destname
  
}
  
function dobackupgzip ()
  
{
  
    db=$1
  
    destname=$destdir/$db.sql.gz
  
    if [[ $haveinnodb -eq 1 ]]
  
    then
  
        dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --single-transaction --databases"
  
    else
  
        dumpcomm="mysqldump --opt -u$dbuser -p$dbpass --databases"
  
    fi
  
    $dumpcomm $db|gzip > $destname
  
}
  
function backup ()
  
{
  
    actioncommand=$1
  
    if [[ $commpress -eq 1 ]]
  
    then
  
        actioncommand="dobackupgzip"
  
    else
  
        actioncommand="dobackupsql"
  
    fi
  
    echo -en "`date`\tBACKUP\t$db\n"
  
    $actioncommand $db
  
}
  
function backupalldb ()
  
{
  
    count=0
  
    for db in ${dbname[@]}
  
    do
  
        backup $db &
  
        let count+=1
  
        [[ $((count%$processnum)) -eq 0 ]] && wait
  
    done
  
    wait
  
    echo "all backup done"
  
}
  

  
purgebinlog
  
redirectlog
  
checkdestdir
  
generateschema
  
guessengine
  
runcommand "flush logs"
  
backupalldb
  
exit 0
  

  
三、具体配置信息
  
cat mysqlbackupconf
  
dbuser="backup"
  
dbpass="backup"
  
exclude='mysql information_schema performance_schema'
  
destdir=/opt/dbbak
  
logdir=/opt/dbbak/log
  
commpress=1
  
processnum=4
  

  
四、备份后结果
  
1、root@10.131.172.202:~# ll /opt/dbbak/20150629/
  
-rw-r--r-- 1 root root 4443602410 Jun 29 19:18 mysqltest1.sql.gz
  
-rw-r--r-- 1 root root 4443601959 Jun 29 19:19 mysqltest.sql.gz
  

  
2、root@10.131.172.202:~# ll /opt/dbbak/log/
  
-rw-r--r-- 1 root root 109 Jun 29 19:19 20150629_10.131.172.202_log



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-555612-1-1.html 上篇帖子: java程序执行,调用shell命令和shell脚本 下篇帖子: linux shell脚本编写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表