基于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}'
|
sed
s/\
//g
`
#数据文件路径
datadir=`
cat
$mycnf |
grep
-i
'^datadir'
|
awk
-F =
'{print $2}'
|
sed
s/\
//g
`
#需要判断是否有/,然后决定是否是全路径
#basedir路径
basedir=`
cat
$mycnf |
grep
-i
'^basedir'
|
awk
-F =
'{print $2}'
|
sed
s/\
//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"
tar
czvfP
"$data_dir/$binlogfile"
"$bin_log"
.[0-9]*
echo
"结束备份二进制日志文件……"
`
date
`>>
"$log_dir/$log"
#删除一天以前的日志文件
echo
"删除过期二进制日志文件……"
`
date
`>>
"$log_dir/$log"
echo
"删除过期二进制日志列表……"
>>
"$log_dir/$log"
find
$dir_bin -
type
f -mtime +1>>
"$log_dir/$log"
find
$dir_bin -
type
f -mtime +1 -
exec
rm
-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 -
type
f -mtime +7>>
"$log_dir/$log"
find
$data_dir -
type
f -mtime +7 -
exec
rm
-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}'
|
sed
s/\
//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 -
type
f -mtime +7 -
exec
rm
-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"
|
gzip
1>
"$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
chmod
777
"$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
- 基于Innobackupex的MySQL备份脚本
- 基于innobackupex的mysql备份脚本
- Mysql 增量备份脚本 innobackupex 增量备份 mysql自动备份
- 使用innobackupex备份mysql遇到的问题
- mysql innobackupex备份恢复
- mysql innobackupex 备份问题
- 实战:INNOBACKUPEX for mysql 5.6自动备份脚本
- mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解
- mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解
- 使用innobackupex备份mysql数据库
- XtraBackup/innobackupex 远程备份MySQL
- innobackupex 备份时utf8mb4编码的mysql数据库失败
- innobackupex的备份参数解析
- xtrabackup 备份mysql数据库二 :innobackupex 命令
- mysql innobackupex xtrabackup 大数据量 备份 还原
- MySQL 使用 innobackupex 备份连接服务器失败
- MySQL基于binlog文件的异地备份策略脚本--shell
- 基于Innobackupex的完全恢复
- 033 - Search in Rotated Sorted Array
- maven下载地址记录
- 黑马程序员-Java集合框架
- 如何让 UITableView 的 headerView跟随 cell一起滚动
- mysql数据库使用常见错误
- 基于innobackupex的mysql备份脚本
- 回溯法解0/1背包问题
- java常见异常
- 单身快乐
- linux or unix vi编辑器常用命令
- 二分k-均值算法
- Android Process 进程通信(一)
- MonoDevelop 常用配置设置
- Python + OpenCV颜色空间(Color Space)