mysql多实例管理脚本_shell实现,利用mysqld_multi自动做多实例从库脚本实现

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

# cat doallslave.sh

#!/bin/sh

#code by scpman

#mail:[email protected]

#blog:http://www.scpman.com

#name:"doallslave.sh"

helpinfo()

{

echo -e '\t\thelp 查看帮助信息'

echo -e '\t\t自动做allslave从库脚本使用帮助'

echo -e '\t\tslavename 只能是xxx_xxx这种命令例如:zq2013_test1'

echo -e '\t\t添加一个新从库 三个参数addslave slavename ip MysqL.tar-name rootpasswd'

echo -e '\t\t例子: addslave slavename 10.0.88.88 MysqL.xxx.tar passwd '

echo -e '\t\t删除一个从库 三个参数 delslave slavename '

echo -e '\t\t例子: delslave slavename'

}

#如果用户没有输入参数(或者输入错误的参数),或者输入的参数为help,则显示帮助信息,并退出。

if [ -z "$1" -o "$1" = "help" ]

then

helpinfo

exit

fi

mulu_create()

{

if [ -d $1 ]

then

echo "$1 is have";

else

mkdir -p $1;

echo "create $1 ok!"

fi

}

check_mycnf()

{

temp1=`tail -n 1 /etc/my.cnf |grep "server_id"`;

if [ -z "$temp1" ]

then

sed -i "" '$d' /etc/my.cnf

check_mycnf

else

echo "/etc/my.cnf符合规范";

fi

}

fuc_addslave()

{

if [ -n "$1" -a -n "$2" -a -n "$3" -a -n "$4" ]

then

slavename=$1

masterip=$2

bao_path=$3

passwd=$4

else

echo "1 2 3 4 is null!shell exit now"

helpinfo

exit

fi

#检查my.cnf是否正确

check_mycnf

echo "开始创建数据包存放目录!"

sleep 1

mulu_create "/usr/doslave/${slavename}/"

mulu_create "/usr/db_backups/${slavename}_MysqL_backup/"

mulu_create "/usr/MysqL_backup/${slavename}_MysqL_backup/"

mulu_create "/usr/MysqL_backup_temp/${slavename}_MysqL_backup/"

tar -zxvf $bao_path -C /usr/doslave/${slavename}/;

rm -rf /usr/db_backups/${slavename}_MysqL_backup/*;

mv /usr/doslave/${slavename}/usr/dlm_db/MysqL/* /usr/db_backups/${slavename}_MysqL_backup/;

chown -R MysqL:MysqL /usr/db_backups/${slavename}_MysqL_backup/;

echo "数据放置完成!开始生成配置文件"

mulu_create "/usr/doslave/confbak"

cp /etc/my.cnf /usr/doslave/confbak/my.cnf_`date +%Y%m%d%H%M%S`;

cp /usr/MysqL_backup/dblist /usr/doslave/confbak/dblist_`date +%Y%m%d%H%M%S`;

#######################my.cnf#############

tempconf="/usr/doslave/${slavename}/mycnf.temp"

tail -n 6 /etc/my.cnf > $tempconf;

sleep 2

old_MysqLd="`cat $tempconf |grep "MysqLd" | sed -e "s/\[MysqLd//;s/\]//;"`"

old_port="`cat $tempconf | grep 'port'|awk '{print $3}'`"

old_db_name="`cat $tempconf | grep "pid-file" | awk -F'/' '{print $4 }'|awk -F'_' '{print $1 "_" $2}'`"

old_server_id="`cat $tempconf | grep "server_id"|awk '{print $3}'`"

new_MysqLd="`expr ${old_MysqLd} + 1`"

new_port="`expr ${old_port} + 1`"

new_db_name="$slavename"

new_server_id=`echo $masterip |awk -F. '{print $3$4"9"}'`

old_MysqLd="`echo $old_MysqLd`"

old_port="`echo $old_port`"

old_db_name="`echo $old_db_name`"

old_server_id="`echo $old_server_id`"

sed -i "" "s/$old_MysqLd/$new_MysqLd/g;s/$old_port/$new_port/g;s/$old_db_name/$new_db_name/g;s/$old_server_id/$new_server_id/g;"$tempconf;

#cat $tempconf

#echo '--->'

sleep 2

echo "" >> /etc/my.cnf;

cat $tempconf >> /etc/my.cnf

echo "MysqLd${new_MysqLd}" >> /usr/MysqL_backup/dblist;

###############################################

echo "my.cnf 和dblist已经修改完成!"

/usr/local/bin/MysqLd_multi start $new_MysqLd

sleep 1

BIN=`cat /usr/db_backups/${slavename}_MysqL_backup/pos_MysqL|awk '{print $1}'`;

POS=`cat /usr/db_backups/${slavename}_MysqL_backup/pos_MysqL|awk '{print $2}'`;

#echo $passwd

echo $BIN

echo $POS

echo /usr/local/bin/MysqL -uroot -p$passwd --socket=/tmp/MysqL_${new_db_name}.sock

sleep 2

/usr/local/bin/MysqL -uroot -p$passwd --socket=/tmp/MysqL_${new_db_name}.sock <

stop slave;

reset slave;

CHANGE MASTER TO MASTER_HOST="$masterip",MASTER_USER='slaveuser',MASTER_PASSWORD='slave123213',MASTER_LOG_FILE="$BIN",MASTER_LOG_POS=$POS;

start slave;

FFF

rm -rf /usr/doslave/${slavename}/;

clear

/usr/local/bin/MysqL -uroot -p$passwd --socket=/tmp/MysqL_${new_db_name}.sock -e "show slave status\G"

echo "服务器: ${masterip} 的从库完成!请刷新并查看PHP从库监控"

}

fuc_delslave()

{

if [ -n "$1" ]

then

nousedbname=$1

else

echo "slavename is null!shell exit now"

helpinfo

exit

fi

if [ -d /usr/db_backups/${nousedbname}_MysqL_backup ]

then

echo "/usr/db_backups/${nousedbname}_MysqL_backup 存在!"

else

echo "/usr/db_backups/${nousedbname}_MysqL_backup这个目录不存在,请确认您的输入是否正确,脚本退出!"

exit;

fi

del_id="`grep -B1 "$nousedbname" /etc/my.cnf|grep MysqLd|sed -e "s/\[//;s/\]//";`"

stop_id="`echo $del_id|sed -e "s/MysqLd//;"`"

echo $del_id

echo $stop_id

/usr/local/bin/MysqLd_multi stop $stop_id

rm -rf /usr/db_backups/${nousedbname}_MysqL_backup;

sed -i '' "/$del_id/d" /usr/MysqL_backup/dblist

sed -i '' "/$del_id/d" /etc/my.cnf

sed -i '' "/$nousedbname/d" /etc/my.cnf

echo "已经删除,请刷新从库监控"

}

if [ "$1" = "addslave" ]

then

echo '添加新从库'

sleep 3

fuc_addslave $2 $3 $4 $5

elif [ "$1" = "delslave" ]

then

echo '删除'

fuc_delslave $2

else

echo $1 此参数是非法的

helpinfo

exit

fi

原文出处http://www.scpman.com/article/show/113/?classid=10

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值