基于innobackupex的mysql备份脚本

来源:互联网 发布:ug编程怎么加刀补 编辑:程序博客网 时间:2024/05/22 13:51
#!/bin/bash
#数据库相关信息
dbuser=root
dbpasswd=password
mycnf=/etc/mysql/my.cnf
#如果bin-log没有指定路径
dir_bin=/opt/mysql/mysqldata/mysqllog
 
#数据库备份的路径
install_dir=/opt/MySqlBackUp
data_dir=$install_dir/data
temp_dir=$install_dir/temp
log_dir=$install_dir/logs
bin_dir=$install_dir/bin
 
#接受邮箱
mail=chengfei@srt.com.cn
 
#备份文件名、日志名、备份日志
sj=`date+\%Y``date+\%m``date+\%d``date+\%H``date+\%M``date+\%S`
datafile=$sj"_data.tar.gz"
log=$sj".log"
binlogfile=$sj"_bin.tar.gz"
 
#使用mysqldump备份
#是否启动dump功能(0表示不启用,1表示启用)
dump_flag=1
#需要dump出来的数据库名
dumpdb=srtair
#dump文件名
dumpfile=$sj"_"$dumpdb".sql.gz"
 
#是否备份至远程
#是否启用ftp传输功能
ftp_flag=0
#ftp IP地址
ftp_ip=
#ftp 用户名
ftp_user=
#ftp 密码
ftp_passwd=
#上传ftp 路径
ftp_dir=
 
#读取my.cnf文件
process_readconfig()
{
echo"-----------开始读my.cnf文件--`date`-------------"
#没有具体路径情况或者有具体路径  
bin_log=`cat$mycnf | grep-i'^log-bin'|awk-F = '{print $2}'|seds/\//g`
#数据文件路径
datadir=`cat$mycnf | grep-i'^datadir'|awk-F = '{print $2}'|seds/\//g`
#需要判断是否有/,然后决定是否是全路径
#basedir路径
basedir=`cat$mycnf | grep-i'^basedir'|awk-F = '{print $2}'|seds/\//g`
}
 
#日志处理
process_binlog()
{
echo"……………………………开始备份日志文件--`date`………………………………">>"$log_dir/$log"
echo"……………………………开始备份日志文件--`date`………………………………"
echo"需要备份二进制日志列表……">>"$log_dir/$log"
ls-tl"$bin_log."[0-9]* >>"$log_dir/$log"
echo"开始备份二进制日志文件……"`date`>>"$log_dir/$log"
tarczvfP"$data_dir/$binlogfile""$bin_log".[0-9]*
echo"结束备份二进制日志文件……"`date`>>"$log_dir/$log"
 
#删除一天以前的日志文件
echo"删除过期二进制日志文件……"`date`>>"$log_dir/$log"
echo"删除过期二进制日志列表……">>"$log_dir/$log"
find$dir_bin -typef -mtime +1>>"$log_dir/$log"
find$dir_bin -typef -mtime +1 -execrm-f {} \;
echo"删除过期二进制日志文件结束……"`date`>>"$log_dir/$log"
echo"…………………………备份日志文件结束--`date`……………………………………">>"$log_dir/$log"
echo"…………………………备份日志文件结束--`date`……………………………………"
}
 
#数据备份
process_backup()
{
process_readconfig
#备份数据库
echo"……………………………开始备份数据文件--`date`………………………………"
echo"……………………………开始备份数据文件--`date`………………………………">>"$log_dir/$log"
source/root/.bash_profile
$bin_dir/innobackupex--user="$dbuser"--password="$dbpasswd"--defaults-file="$mycnf"--stream=tar"$temp_dir"2>"$temp_dir/$sj"_tmp.log | gzip>"$data_dir/$datafile"
echo"……………………………备份数据文件结束--`date`………………………………">>"$log_dir/$log"
echo"……………………………备份数据文件结束--`date`………………………………"
 
cat"$temp_dir/$sj"_tmp.log>>"$log_dir/$log"
#删除7天以前备份数据和信息
echo"清理7天前备份数据与相关信息……"`date`>>"$log_dir/$log"
find$data_dir -typef -mtime +7>>"$log_dir/$log"
find$data_dir -typef -mtime +7 -execrm-f {} \;
 
#mysqldump操作
if["$dump_flag"== 1 ]; then
echo"……………… mysqldump操作开始--`date`……………"
echo"……………… mysqldump操作开始--`date`………">>"$log_dir/$log"
 exp_sql
echo"……………… mysqldump操作结束--`date`…………">>"$log_dir/$log"
echo"……………… mysqldump操作结束--`date`……………………………"
fi
 
#登录mysql,切换日志
$basedir/bin/mysql-u$dbuser -p$dbpasswd<<XFF
flush logs;
exit
XFF
#备份日志文件
process_binlog
 
#ftp(没有写是否上传失败,成功)
if["$ftp_flag"== 1 ]; then
echo"……………… ftp操作开始--`date`……………"
echo"……………… ftp操作开始--`date`…………">>"$log_dir/$log"
 exec_ftp
echo"……………… ftp操作结束--`date`…………">>"$log_dir/$log"
echo"……………… ftp操作结束--`date`……………………………"
fi
 
#发送邮件
process_send
}
 
process_send()
{
  #查找错误
  grep"Error""$temp_dir/$sj"_tmp.log > "$temp_dir/$sj".err
  IP=`/sbin/ifconfig${eth} | grep'inet addr:'|awk'{print $2}' | awk-F : '{print $2}'`
  IP=`echo$IP|awk'{print $1}'`
  echo`grep"innobackupex: completed OK\!" "$temp_dir/$sj"_tmp.log | awk-F : '{print $4}'|seds/\//g`>"$temp_dir/$sj".good
  GOOD_COUNT=`cat"$temp_dir/$sj".good |wc-l`
  ERROR_COUNT=`cat "$temp_dir/$sj".err |wc-l`
  if["$ERROR_COUNT"== 0 -a "$GOOD_COUNT"== 1 ]; then
      
     echo"`date`-----MySql备份成功-----">>"$log_dir"/result.log
     echo"-----------------------------------">>"$log_dir"/result.log
     echo"……………………………开始发送邮件--`date`………………………………"
     echo"……………………………开始发送邮件--`date`………………………………">>"$log_dir/$log"
     echo"MySql_Backup_Succeed"| mutt -s "$IP"_MySql_Backup_Succeed -a "$log_dir/$log"${mail}
  else
     echo"`date`-----MySql备份失败,请检查$temp_dir"/"$sj"_tmp.log>>"$log_dir"/result.log
     echo"-----------------------------------">>"$log_dir"/result.log
     echo"……………………………开始发送邮件--`date`………………………………"
     echo"……………………………开始发送邮件--`date`……………………………">>"$log_dir/$log"
     cat"$temp_dir/$sj".err  | mutt -s "$IP"_MySql_Backup_Fail -a "$temp_dir/$sj"_tmp.log ${mail}
  fi
   #删除7天前的日志文件
   find$temp_dir -typef -mtime +7 -execrm-f {} \;
   echo"……………………………发送邮件结束--`date`………………………………">>"$log_dir/$log"
   echo"……………………………发送邮件结束--`date`………………………………" 
}
 
#导出sql语句
exp_sql()
{
  mysqldump -u "$dbuser"-p"$dbpasswd"  --single-transaction --allow-keywords --add-locks   --add-drop-table  -F -q "$dumpdb"|gzip1>"$data_dir/$dumpfile"
}
 
#ftp操作
exec_ftp()
{
  echo"#!/bin/bash">"$temp_dir/$sj"_ftp.sh
  echo"ftp -n $ftp_ip <<XFF">>"$temp_dir/$sj"_ftp.sh
  echo"user $ftp_user $ftp_passwd">>"$temp_dir/$sj"_ftp.sh
  echo"bin">>"$temp_dir/$sj"_ftp.sh
  echo"cd $ftp_dir">>"$temp_dir/$sj"_ftp.sh
  echo"lcd $data_dir">>"$temp_dir/$sj"_ftp.sh
  echo"put $datafile">>"$temp_dir/$sj"_ftp.sh
  echo"put $dumpfile">>"$temp_dir/$sj"_ftp.sh
  echo"put $binlogfile">>"$temp_dir/$sj"_ftp.sh
  echo"lcd $log_dir">>"$temp_dir/$sj"_ftp.sh
  echo"put $log">>"$temp_dir/$sj"_ftp.sh
  echo"close">>"$temp_dir/$sj"_ftp.sh
  echo"bye">>"$temp_dir/$sj"_ftp.sh
  echo"XFF">>"$temp_dir/$sj"_ftp.sh
  chmod777"$temp_dir/$sj"_ftp.sh
  sh "$temp_dir/$sj"_ftp.sh
}
 
#执行备份
process_backup

mysql_backup.sh程序安装说明

1、安装mysqlbackup程序
上传mysqlbackup到服务器/tmp目录
cd /tmp
unzip mysqlbackup.zip
cp /tmp/mysqlbackup/* /opt/mysql/product/5.1/bin
mkdir -p /opt/MySqlBackUp/bin
mkdir -p /opt/MySqlBackUp/data
mkdir -p /opt/MySqlBackUp/logs
mkdir -p /opt/MySqlBackUp/temp
ln -s /opt/mysql/product/5.1/bin/innobackupex /opt/MySqlBackUp/bin/innobackupex

对innobackupex进行授权
cd /opt/mysql/product/5.1/bin/
chmod +x innobackupex*
chmod +x xtrabackup*
chmod +x tar4ibd

cp /tmp/mysqlbackup/mysql_backup.sh /opt/MySqlBackUp/bin/
chmod 775 /opt/MySqlBackUp/bin/mysql_backup.sh

2、修改mysql_backup.sh中的相关数据
dbuser
dbpasswd
mail
dumpdb

3、配置mysql环境变量到root中
export MYSQL_BASE=/opt/mysql
export BASEDIR=$MYSQL_BASE/product/5.1
export DATADIR=$MYSQL_BASE/mysqldata
export LD_LIBRARY_PATH=$BASEDIR/lib:/lib:/usr/lib:/usr/local/lib
export TMPDIR=/tmp
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$BASEDIR/bin:$MYSQL_BASE:$BASEDIR:$LD_LIBRARY_PATH

添加到/root/.bash_profile文件中

4、测试备份
cd /opt/MySqlBackUp/bin
./mysql_backup.sh

5、查看备份是否成功
cat /opt/MySqlBackUp/logs/result.log
如果提示备份成功,则表示程序安装成功,可能不熟到crontab中

6、部署crontab
0 1 * * * (cd /opt/MySqlBackUp/bin;sh ./mysql_backup.sh)

说明:参数配置,均是基于按照mysql安装路径配置


http://www.xifenfei.com/2011/06/%E5%9F%BA%E4%BA%8Einnobackupex%E7%9A%84mysql%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC.html

0 0
原创粉丝点击