mysql热备 binlog日志切割_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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值