实时备份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