开源中文网

您的位置: 首页 > 数据库应用 > MySQL > 正文

bakrec_mysql.sh脚本使用说明

来源:  作者:

1   功能介绍脚本名 bakrec_mysql.sh
脚本存放路径 保证统一
备份路径 须根据具体服务器的分区情况,放到一个剩余空间较大的分区.
备份目录名 统一为backupdb
 
 
各个参数说明如下:
-a: backup all database #全库备份
-e: backup each database#分库备份
-d: backup single/multi database#备份指定的一个库或者多个库
-t: backup single/multi table of single database#备份一个库下面的一个表或者多个表
-b: backup binlog#备份binlog日志,备份过程,每次记录最后的二进制文件号,将之前范围内的binlog打包(bz2格式),放在$DIR_BACKUP目录下
-r: recover all database(!require password!)#恢复全库,为保安全,恢复时需要输入密码
-o: recover single database/talbe,you should be designation database name(!require password!)#恢复单库或单表,恢复时需要输入密码
-p: create connect mysql password#创建连接mysql的密码文件,存放位置$DIR_MySQL/etc目录下,权限是600
-s: configuration rsyncd#创建rsyncd服务(backup机上有rsyncd服务,故不需要在每台DB server上创建rsyncd服务)
    If you want ceate a rsyncd, you should enter 'bakrec_mysql.sh -s cet'
    If you want restart rsyncd, you should enter 'bakrec_mysql.sh -s rst'
-c: sync to backup center#同步到backup
 
 
2   备份策略 2.1     分库备份在脚本的LIST_EXCLUDE_DB='(test|information_schema|performance_schema)'可以过滤不备份的数据库.
备份路径 根据服务器具体分区情况而定
备份目录名统一 backupdb
 
 
关于是否打开binlog的函数解释
function backup()
{
read_pwd
LOGBIN_STATUS=`$CMD_MYSQL -u$USER -p$PASSWD -N -s -e "SHOW VARIABLES LIKE 'log_bin'" | gawk '{print $2}'`
if [ $LOGBIN_STATUS = "ON" ]; then
  MASTER='--master-data=2'
else
  MASTER=' '
fi
}
这个函数的功能是检测MySQL服务器有没有打开binlog日志,如果打开,则在备份的时候添加--master-data=2这个参数,否则不添加.
 
 
分库备份在脚本中的实现函数为backup_each
function backup_each()
{
backup
for db in $($CMD_MYSQL -u$USER -p$PASSWD -N -s -e "SHOW DATABASES"|egrep -v $LIST_EXCLUDE_DB)
do
  $CMD_MYSQLDUMP -u$USER -p$PASSWD -x -R $MASTER $db --databases |gzip >$HOSTNAME.$db.$TIME.sql.gz
done
# delete 7 days ago
for db in $($CMD_MYSQL -u$USER -p$PASSWD -N -s -e "SHOW DATABASES"|egrep -v $LIST_EXCLUDE_DB)
do
  if [ ! -f $HOSTNAME.$db.$TIME_7.sql.gz ]; then
    echo
  else
    rm $HOSTNAME.$db.$TIME_7.sql.gz -f
  fi
done
}
功能说明:
依次备份除列表之外的所有库,在本机会自动删除7天之前的备份
2.2     binlog备份binlog备份在脚本中的实现函数为backup_binlog
function backup_binlog()
{
if [ -s $DIR_BACKUP/mysql-bin.queue ]; then
  read POS < $DIR_BACKUP/mysql-bin.queue
  cd $DIR_DATA
  tar -jcvf $DIR_BACKUP/$TIME_YM/$HOSTNAME.$POS.$TIME.bz2 `gawk -F'/' '{print $2}' $BINLOG_NAME.index |sed -n "/$POS/,//p"`
  cd -
  if [ -f $DIR_BACKUP/$TIME_YM/$HOSTNAME.$POS.$TIME_7.bz2 ]; then
    rm $DIR_BACKUP/$TIME_YM/$HOSTNAME.$POS.$TIME_7.bz2 -f
  fi
fi
# write last pos
gawk -F'/' '{print $2}' $DIR_DATA/$BINLOG_NAME.index | tail -n 1 >$DIR_BACKUP/mysql-bin.queue
}
逻辑如下:
1,如果检测到$DIR_BACKUP/mysql-bin.queue这个文件,并且文件大小大于0个字节.则读取这个文件内容,并付给变量POS,然后执行tar –jcvf命令,并删除7天之前的备份,否则直接执行gawk命令.
2,gawk命令的意思是把当前binlog日志的编号记录到$DIR_BACKUP/mysql-bin.queue文件内.
 
2.3     推到备份机实现功能代码如下
  c)
    rsync -czrpt  --password-file=$DIR_BIN/bakrec_mysql.password $DIR_BACKUP/$TIME_YM backupdbuser@192.168.0.1::backup/$HOSTNAME
    result_status
    ;;
 
rsync参数的意思如下:
c: 打开校验开关,强制对文件传输进行校验
z: 对备份的文件在传输时进行压缩处理(节省网络带宽,消耗本机CPU)
r: 对子目录以递归模式处理
p: 保持文件权限
t: 保持文件时间信息
 
同步的目录$DIR_BACKUP/$TIME_YM
backup主机IP地址192.168.0.1
 
result_status函数功能,如果该语句执行失败,则发送邮件给db-request
 
2.4     backup机设置backup机上面修改rsync配置,添加模块backup上面的配置如下
uid = root
gid = root
max connections = 10
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
 
[backupdb.cn5]
path = /backup
hosts allow = *
hosts deny = *
ignore errors
read only = no
list = no
auth users = user
secrets file = ****/password
 
说明
passwordrsync连接的密码文件,格式
user:password
权限600
 
3   使用说明 3.1     定义变量根据服务器情况,可能会修改如下变量
DIR_MYSQL='/usr/local/mysql'
DIR_BACKUP="/tmp/backup"
 
对于rpm安装,或者非常规的安装,可能还需要修改
CMD_MYSQLDUMP="$DIR_MYSQL/bin/mysqldump"
CMD_MYSQL="$DIR_MYSQL/bin/mysql"
 
3.2     创建MySQL密码文件执行脚本,-p参数,自动创建$DIR_MYSQL/etc/passwordfile文件,输入密码,脚本会自动写入该文件
 
# bash bakrec_mysql.sh  -p
Please enter MySQL(user=root)'s password:
 
验证密码文件创建成功与否,以及权限600
# ls -l $FILE_PASSWD
查看密码文件内容
# cat $FILE_PASSWD
 
3.3     创建rsync密码文件权限600
3.4     测试备份与推送bash –x 脚本名 测试的参数
可以看到脚本的执行过程.
 
-c参数是将备份目录内容,推送到backup
3.5     crontab设置crontab执行脚本出错总结:
    1) 脚本本身问题
    2) 脚本执行权限问题
    3) 脚本名字拼写问题,指定了错误的脚本名
    4) 遗漏了脚本中需要的密码文件
    5) 备份的目录不存在
4   FAQ问题补充
标记红色的password 要根据实际密码填写.

Tags:bakrecmysql_sh 脚本 使用说明
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明