始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

FreeBSD下的MySQL备份方案

发布时间:  2012/7/30 17:57:16

核心提示:如何在 FreeBSD 下实现 MySQL 的全量及增量备份,确保数据的最大可靠性。在这里利用了 MySQL 的复制以及新版本的 FreeBSD 集成的快照功能。
  约定:本备份方案是在 MySQL 的 复制从服务器 上执行。MySQL 安装在 /usr/local/mysql 下,datadir 则为 /data/mysql,而日志以及 innodb 的 log_file 均保存在 /logs/mysql/ 下。用于保存备份文件的目录为 /backup/mysql/,备份方案分成 每天全量备份 一次以及 每小时增量备份 一次。因此,如果 MySQL 发生误操作以及其他情况导致数据丢失,那么在采用本方案的情况下,最坏的情况只会丢失不到一个小时所产生的数据。当然了,也可以实现实时增量备份,这会在以后的文章中讲到。
  一、全量备份
  先来看看全量备份的脚本:
  #!/bin/sh
  #
  # created by yejr,2007/06/03
  #
  # 本脚本用于定期做全量备份,备份的对象是slave上的全部数据
  # 每次备份之前都先执行"STOP SLAVE; FLUSH TABLES;",然后将所有文件拷贝到备份目录下
  #
  echo "[backupmysql_fullly]"
  date
  today=`date +"%Y_%m_%d"`
  logdir=/logs/mysql
  datadir=/data/mysql
  bkdir=/backup/mysql/$today/full_backup
  expdays=7
  if [ ! -d $bkdir/$today ] ; then
  mkdir -p $bkdir
  fi
  #停止同步,刷新日志,刷新表
  echo "stop slave; flush logs; flush tables;"
  mysqladmin -uroot stop-slave
  mysqladmin -uroot flush-logs
  mysqladmin -uroot flush-tables
  cd $logdir
  #备份日志文件
  echo "backup errro log"
  cp $logdir/error.log* $bkdir/
  echo "backup ib_logfile* master.info relay.info"
  cp ib_logfile* master.info relay.info $bkdir/
  #拷贝所有文件
  echo "backup my.cnf"
  cp /usr/local/mysql/my.cnf $bkdir/
  ##如果是老版本的 FreeBSD 不支持快照功能,就拷贝全部数据库文件
  #cd $datadir
  #cp -rf * $bkdir/
  ##如果是新版本的 FreeBSD,则采用其特有的 snapshot 功能,先制作镜像,而后挂载镜像,再拷贝数据文件
  echo "make snapshot of /backup"
  /sbin/mksnap_ffs /data/ /data/.snap/mysql_snap_$today
  #执行 slave-start;
  mysqladmin -uroot start-slave
  #挂载镜像文件,而后拷贝数据
  /sbin/mdconfig -a -t vnode -f /data/.snap/mysql_snap_$today -u 4
  /sbin/mount -r /dev/md4 /backup/.snap
  cp -rf /backup/.snap/mysql/data/* $bkdir/
  /sbin/umount /backup/.snap
  /sbin/mdconfig -d -u 4
  #删除7天前的过期文件
  find /backup/mysql -type d -mtime +$expdays -maxdepth 1 | xargs rm -rf
  find /data/.snap -type f -mtime +$expdays -maxdepth 1 | xargs rm -f
  #修改备份文件的属主
  chown -R nobody:nobody $bkdir
  echo "[/backupmysql_fullly]"
  接下来就是在 crontab 中增加一条记录,使得每天都执行本备份脚本。
  0 0 * * * (/bin/sh /backup/mysql/backupmysql_fullly.sh >> /backup/mysql/backupmysql.log)二、增量备份
  下面是增量备份的脚本:
  #!/bin/sh
  #
  # created by yejr,2007/06/03
  #
  # 本脚本用于定期做增量备份,备份的对象是binlog
  # 每次备份之前都先执行 flush-logs,然后将最近的binlog移动到备份目录下
  #
  echo "[backupmysql_hourly]"
  date
  logdir=/logs/mysql
  bkdir=/backup/mysql
  now=`date +"%Y_%m_%d_%H"`
  today=`date +"%Y_%m_%d"`
  if [ ! -d $bkdir/$today ] ; then
  mkdir -p $bkdir/$today
  fi
  #执行 "flush logs"
  echo "flush logs; backup error log"
  mysqladmin -uroot flush-logs
  #去的 binlog 文件总数,去掉最后一个以及 binlog.index
  total=`ls $logdir/logbin.*|wc -l`
  total=`expr $total - 2`
  #循环移动所有的 binlog 文件
  echo "backup binary logs"
  for f in `ls $logdir/logbin.*|head -n $total`
  do
  bf=`basename $f`
  mv -if $f  $bkdir/$today/$bf
  done
  chown -R nobody:nobody $bkdir
  echo "[/backupmysql_hourly]"然后在 crontab 中增加一条记录,使得每小时都执行本备份脚本。
  0 */` * * * (/bin/sh /backup/mysql/backupmysql_hourly.sh >> /backup/mysql/backupmysql.log)在 linux 下,也可以采用本备份方案,不过执行的是不支持 snapshot 情况下的备份策略,即拷贝所有文件。或者,也可以利用 linux 自带的 lvm 功能实现类似 FreeBSD 的快照功能。
  以上脚本在 FreeBSD 6.2 + MySQL 5.0.37 环境下实验通过。
  用cron每天2:00自动备份MySQL数据库,文件名以当天的年月日命名,前缀为数据库名,备份后自动删除前六天的备份。
  1、建备份目录,以用户user为例
  $mkdir /usr/home/user/dbbak
  $mkdir /usr/home/user/dbbak/user_db
  2、写/usr/home/user/dbbak/dbbak.sh 脚本。DBName=数据库名 BackupPath=备份目录 DBbinPath=mysqldump等实用工具所在目录
  #!/bin/sh
  DBName=user_db
  BackupPath=/usr/home/user/dbbak/
  DBbinPath=/usr/local/bin/mysqldump
  if ${DBbinPath} --opt --extended-insert=false -uroot ${DBName} > ${BackupPath}${DBName}"/"${DBName}`date "+%Y-%m-%d"`".sql" ;
  then
  find ${DBbinPath}${DBName}"/" -mtime +6 -exec rm {} \;
  else
  exit
  fi
  3、将dbbak.sh加入cron
  #vi/etc/crontab 加入下面一行:
  0 2 * * * root /usr/home/user/dbbak/dbbak.sh
  ---------------------------------------------------------------------------------------------------
  用cron每天18:00自动备份MySQL数据库,文件名以当天的年月日命名,前缀为数据库名,备份后自动删除前六天的备份。
  1、建备份目录,以用户shaobing为例
  $mkdir /home/shaobing/dbbak
  $chmod 755 /home/shaobing/dbbak  //确保该文件可写
  $mkdir /home/shaobing/dbbak/rd_db
  $chmod 755 /home/shaobing/dbbak/rd_db  //确保该文件可写
  2、写/home/shaobing/dbbak/dbbak.sh 脚本。DBName=数据库名 BackupPath=备份目录 DBbinPath=mysqldump等实用工具所在目录
  #!/bin/sh
  DBName=npc_people
  BackupPath=/home/shaobing/dbbak/rd_dbbak/
  DBbinPath=/usr/local/bin/mysqldump
  if ${DBbinPath} --opt --extended-insert=false -uroot ${DBName} > ${BackupPath}${DBName}"/"${DBName}`date "+%Y-%m-%d"`".sql" ;
  then
  find ${DBbinPath}${DBName}"/" -mtime +6 -exec rm {} \;
  else
  exit
  fi
  3、将dbbak.sh加入cron
  #vi /etc/crontab 加入下面一行:
  #每天下午6点(18点)备份数据并删除前6六天的备份文件
  0 18 * * * root /home/shaobing/dbbak/dbbak.sh
  28      11       *       *       *       root     /home/shaobing/dbbak/dbbak.sh
  ------------------------------------------------------------------------------------------
  直接copy数据库文件
  在shell里 写cp -r /var/db/mysql/npc_people/   .../.......
  #!/bin/sh
  mkdir /home/shaobing/dbbak/rd_dbbak/`date "+%Y-%m-%d"`/
  cp -r /var/db/mysql/npc_people/   /home/shaobing/dbbak/rd_dbbak/`date "+%Y-%m-%d"`/

亿恩科技地址(ADD):郑州市黄河路129号天一大厦608室 邮编(ZIP):450008 传真(FAX):0371-60123888
   联系:亿恩小凡
   QQ:89317007
   电话:0371-63322206


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      1
     
     
     
     

    0371-60135900
    7*24小时客服服务热线