mysqlbinlog-备份及切割脚本

实时备份MySQLBinlog脚本
#!/bin/bash
#NAME:JDS
#EMAIL:cu97ming@hotmail.com

#备份所使用的命令
#备份的命令必须在环境变量否则需要填写指定路径
my_binlog_cmd=/usr/local/mysql/bin/mysqlbinlog
my_clien=/usr/local/mysql/bin/mysql

#binlog备份的日志保存路径
binlog_backup_path=/data/backup_warehouse/mysql_binary

#备份类型(远程备份:remote 本地备份:local 使用login_path:login_path)
my_bckup_type=login_path

#配置用户信息
my_host=local
my_user=root
my_pass=root
my_socket=/tmp/mysql.sock

#配置login_path信息
my_login_path_name=repli_user


function generate_conn_type()
{
  #该脚本用于判断连接MySQL的方式并

  if [ ${my_bckup_type} == "remote" ];then
    echo " --host=${my_host} --user=${my_user} --password=${my_pass}"
  elif [ ${my_bckup_type} == "local" ];then
    echo "--user=${my_user} --password=${my_pass} --socket=${my_socket}"
  elif [ ${my_bckup_type} == "login_path" ];then
    echo "--login-path=${my_login_path_name}"
  else
    echo "Database connection is incorrect"
  fi
}

function init_base()
{
  #该函数用于检查系统环境

  #获取MySQL连接方式
  con_type=$(generate_conn_type)

  #如果该目录不存在则创建该目录
  if [ ! -d ${binlog_backup_path} ];then
    mkdir -p ${binlog_backup_path}
  fi

  #获取备份目录是否有binlog 文件,如果没有文件则从MySQL获取的binlog名文件(需要 super 权限)
  cd ${binlog_backup_path}
  show_binglog_file=$(ls -rl|egrep -v '^d'|awk '{print $NF}'|tail -n +2|wc -l)

  if [ ${show_binglog_file} == 0 ];then
    get_binlog_name=$(
    ${my_clien} ${con_type} -e "SHOW BINARY LOGS;"|awk '{print $1}'|tail -n1)
  fi

  echo ${get_binlog_name}
}

function binlog_process()
{
  #该函数用于获取进程是否运行或者运行binlog命令

  #获取 mysqlbinlog 命令 是否在执行同步命令
  get_binlog_process=$(ps -ef |grep  'mysqlbinlog' |grep -v 'grep'|wc -l)

  #get_binlog_process变量等于0则运行mysqlbinlog,否则输出正在运行
  if [ "${get_binlog_process}" == "0" ];then
    run_my_binlog
    echo "Run mysqlbinlog"
  else
    echo "is runing"
  fi
}

function run_my_binlog()
{
  #该函数用于运行binlog 命令

  #获取MySQL连接方式
  con_type=$(generate_conn_type)
  #进入备份的目录
  cd ${binlog_backup_path}
  #获取 screen 会话进程
  screen_process=$(screen -ls  |grep mylogbackup|wc -l)

  #判断screen_process变量为0 则生成一个screen会话进行后台运行
  if [ ${screen_process} == 0 ];then
    screen -dmS mylogbackup -d
  fi

  #remote_binlog_name 变量用于获取远程binlog日志信息
  #变量值不为空则按照获取到的binlog日志信息运行
  #变量值为空则获取当前目录最新的binlog日志并删除重新运行
  if [ "${remote_binlog_name}" != "" ];then
    screen -S mylogbackup -X screen ${my_binlog_cmd} ${con_type} \
    --raw --read-from-remote-server --stop-never ${remote_binlog_name}
  else
    binlog_num=$(ls -rl |egrep  -v '^total|^d' |awk '{print $NF}'|head -1)
    rm ${binlog_num}
    screen -S mylogbackup -X screen ${my_binlog_cmd} ${con_type} \
    --raw --read-from-remote-server --stop-never ${binlog_num}
  fi
}

remote_binlog_name=$(init_base)
binlog_process
MySQLbinlog 日志切割脚本
#!/bin/bash
#NAME:JDS
#EMAIL:cu97ming@hotmail.com

#获取时间日期
my_date=$(date +%-F)

#备份所使用的命令
#备份的命令必须在环境变量否则需要填写指定路径
my_binlog_cmd=/usr/local/mysql/bin/mysqlbinlog
my_clien=/usr/local/mysql/bin/mysql

#binlog备份的日志保存路径
binlog_backup_path=/data/backup_warehouse/mysql_binary

#备份类型(远程备份:remote 本地备份:local 使用login_path:login_path)
my_bckup_type=login_path

#配置用户信息
my_host=local
my_user=root
my_pass=root
my_socket=/tmp/mysql.sock

#配置login_path信息
my_login_path_name=repli


function generate_conn_type()
{
  #该脚本用于判断连接MySQL的方式并

  if [ ${my_bckup_type} == "remote" ];then
    echo " --host=${my_host} --user=${my_user} --password=${my_pass}"
  elif [ ${my_bckup_type} == "local" ];then
    echo "--user=${my_user} --password=${my_pass} --socket=${my_socket}"
  elif [ ${my_bckup_type} == "login_path" ];then
    echo "--login-path=${my_login_path_name}"
  fi
}

function split_binlog()
{
  #该函数用于将刷新日志并将刷新之前的日志进行归档

  #生成备份日志目录 格式:xxxx-xx-xx_binlog
  today=${my_date}_binlog

  cd ${binlog_backup_path}
  #按天创建备份日志的目录
  mkdir ${today}
  #获取最新刷新的binlog日志名
  new_binglog_file=$(ls -rl |egrep  -v '^d' |awk '{print $NF}'|tail -n +3)
  mv ${new_binglog_file} ${today}
}

function flush_binary_log()
{
  #该函数用于刷新binlog日志

  #获取mysql 连接信息参数
  con_type=$(generate_conn_type)

  #刷新出新的binlog日志
  ${my_clien} ${con_type}  -e "flush binary logs;"
}

flush_binary_log
split_binlog
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注