首页 电脑 电脑学堂 查看内容

一个脚本实现Mysql的备份

2011-9-15 21:44 718 0

摘要:   对于数据库的备份和恢复是DBA的主要责任,而如何才能有效的备份数据库,并且能在数据库崩溃的时候及时恢复便变的相当重要了,如果在Linux上纯手动的备份数据库,将会带来很大的麻烦,所有我就写了个脚本...
关键词: nbsp mysql 备份 mysqlbak DATE MASTER STATUS 数据库 backup mybackup

  对于数据库的备份和恢复是DBA的主要责任,而如何才能有效的备份数据库,并且能在数据库崩溃的时候及时恢复便变的相当重要了,如果在Linux上纯手动的备份数据库,将会带来很大的麻烦,所有我就写了个脚本,把脚本加入到定期任务列表中,定期执行数据备份,这就变得更加容易管理数据库了,我这里是一个简单的小脚本,当然在实际引用中还要修改,比如添加用户和密码,可以根据自己的需要在做修改。  下面简单的介绍一下这个脚本,这个脚本执行的时候有四个参数:  /PATH/mysqlbak.sh -f  //完全备份,这个可以根据自己数据库变动的情况设置多长时间执行一次,加入一个月执行一次吧!  /PATH/mysqlbak.sh -d //这个是从最后一次完全备份到目前的时间的一次差异备份,这样就减少了备份数据库的时间。  /PATH/mysqlbak.sh -i //这个参数可以实现增量备份,也就是上一次备份和这次备份之间数据库的变动,这个时间可以短一点,这样可以在数据库崩溃的时候减少损失,可以一个小时一次。  /PATH/mysqlbak.sh -h //这个是帮助信息  把这些都加入到定期执行计划中,就可以实现自动执行脚本了,不用管理员手动进行备份了。  #vim mysqlbak.sh  #!/bin/bash  #  function HELPTXT {  echo "/PATH/mysqlbak.sh -f:   You can backup all databases"  echo "/PATH/mysqlbak.sh -i:   Just backup the exter change from the last backup"  echo "/PATH/mysqlbak.sh -d:   Backup from the last full-backup to the current time"  }  function HELPTXT {  echo "/PATH/mysqlbak.sh -f:   You can backup all databases"  echo "/PATH/mysqlbak.sh -i:   Just backup the exter change from the last backup"  echo "/PATH/mysqlbak.sh -d:   Backup from the last full-backup to the current time"  }  DATE=`date "+%F-%H-%M-%S"`  mysql -e "FLUSH TABLES WITH READ LOCK;"  mysql -e "SHOW MASTER STATUS;">/dev/null  startfile=/tmp/startposition  exterfile=/tmp/exterposition  while getopts "fdih" OPTS;do  mysqldump  --all-databases  >/mybackup/db.$DATE  STARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$startfile`  ESTARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$exterfile`  cd /mybackup  tar -cjf /root/bakmysql/db.$DATE.tar.gz2 db.$DATE >/dev/null  ;;  d)  mysql -e "FLUSH TABLES WITH READ LOCK;"  DATE=`date "+%F-%H-%M-%S"`  mysql -e "FLUSH TABLES WITH READ LOCK;"  mysql -e "SHOW MASTER STATUS;">/dev/null  startfile=/tmp/startposition  exterfile=/tmp/exterposition  while getopts "fdih" OPTS;do  mysqldump  --all-databases  >/mybackup/db.$DATE  STARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$startfile`  ESTARTPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'>$exterfile`  cd /mybackup  tar -cjf /root/bakmysql/db.$DATE.tar.gz2 db.$DATE >/dev/null  ;;  d)  mysql -e "FLUSH TABLES WITH READ LOCK;"  mysql -e "SHOW MASTER STATUS;">/dev/null  FILE=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $1}'`  STARTPOSITION=`cat $startfile`  ENDPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}'`  mysqlbinlog --start-position $STARTPOSITION  --stop-position $ENDPOSITION /mydata/data/$FILE >/mybackup/incre.$DATE  cd /mybackup  tar -cjf /root/bakmysql/incre.$DATE.tar.gz2  incre.$DATE >/dev/null  ;;  i)  mysql -e "FLUSH TABLES WITH READ LOCK;"  mysql -e "SHOW MASTER STATUS;">/dev/null  FILE=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $1}'`  EENDPOSITION=`mysql -e "SHOW MASTER STATUS;" | tail -1 | awk '{print $2}' 》$exterfile`  ESTARTPOSITION=`tail -n 2 $exterfile | head -n 1`  Exendposition=`tail -n 1 $exterfile`  mysqlbinlog --start-position $ESTARTPOSITION  --stop-position $Exendposition  /mydata/data/$FILE >/mybackup/exter.$DATE  cd /mybackup  tar -cjf /root/bakmysql/exter.$DATE.tar.gz2  exter.$DATE >/dev/null  ;;  h)  HELPTXT  ;;  esac  done  在crontab -e中添加任务计划,就能实现自动备份数据库了!!
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部