频道栏目
首页 > 系统 > Linux > 正文

shell实现,利用mysqld_multi自动做多实例从库脚本实现

2013-09-28 11:04:42            作者:scpman
收藏   我要投稿

shell实现,利用mysqld_multi自动做多实例从库脚本实现

 

# cat doallslave.sh

001

#!/bin/sh

002

#code by scpman

003

#mail:scpman@live.com

004

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

005

#name:"doallslave.sh"

006

helpinfo()

007

{

008

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

009

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

010

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

011

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

012

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

013

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

014

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

015

}

016

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

017

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

018

then

019

helpinfo

020

exit

021

fi

022

mulu_create()

023

{

024

    if [ -d $1 ]

025

    then

026

        echo "$1 is have";

027

    else

028

        mkdir -p $1;

029

        echo "create $1 ok!"

030

    fi

031

}

032

check_mycnf()

033

{

034

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

035

    if [ -z "$temp1" ]

036

    then

037

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

038

        check_mycnf

039

         

040

    else   

041

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

042

    fi

043

}

044

fuc_addslave()

045

{

046

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

047

then

048

    slavename=$1

049

    masterip=$2

050

    bao_path=$3

051

    passwd=$4

052

else

053

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

054

    helpinfo

055

    exit

056

fi

057

#检查my.cnf是否正确

058

check_mycnf

059

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

060

sleep 1

061

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

062

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

063

mulu_create "/usr/mysql_backup/${slavename}_mysql_backup/"

064

mulu_create "/usr/mysql_backup_temp/${slavename}_mysql_backup/"

065

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

066

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

067

mv /usr/doslave/${slavename}/usr/dlm_db/mysql/*  /usr/db_backups/${slavename}_mysql_backup/;

068

chown -R mysql:mysql /usr/db_backups/${slavename}_mysql_backup/;

069

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

070

mulu_create "/usr/doslave/confbak"

071

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

072

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

073

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

074

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

075

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

076

sleep 2

077

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

078

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

079

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

080

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

081

new_mysqld="`expr ${old_mysqld} + 1`"

082

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

083

new_db_name="$slavename"

084

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

085

old_mysqld="`echo $old_mysqld`"

086

old_port="`echo $old_port`"

087

old_db_name="`echo $old_db_name`"

088

old_server_id="`echo $old_server_id`"

089

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;

090

#cat $tempconf

091

#echo '--->'

092

sleep 2

093

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

094

cat $tempconf >> /etc/my.cnf

095

echo "mysqld${new_mysqld}" >> /usr/mysql_backup/dblist;

096

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

097

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

098

/usr/local/bin/mysqld_multi start $new_mysqld

099

sleep 1

100

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

101

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

102

#echo $passwd

103

echo $BIN

104

echo $POS

105

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

106

sleep 2

107

/usr/local/bin/mysql -uroot -p$passwd --socket=/tmp/mysql_${new_db_name}.sock <<FFF

108

stop slave;

109

reset slave;

110

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

111

start slave;

112

FFF

113

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

114

clear

115

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

116

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

117

}

118

fuc_delslave()

119

{

120

if [ -n "$1" ]

121

then

122

    nousedbname=$1

123

else

124

    echo "slavename is null!shell exit now"

125

    helpinfo

126

    exit

127

fi

128

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

129

then

130

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

131

else

132

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

133

    exit;

134

fi

135

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

136

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

137

echo $del_id

138

echo $stop_id

139

/usr/local/bin/mysqld_multi stop $stop_id

140

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

141

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

142

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

143

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

144

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

145

}

146

if [ "$1" = "addslave" ]

147

then

148

echo '添加新从库'

149

sleep 3

150

fuc_addslave $2 $3 $4 $5

151

elif [ "$1" = "delslave" ]

152

then

153

echo '删除'

154

fuc_delslave $2

155

else

156

echo $1 此参数是非法的

157

helpinfo

158

exit

159

fi

 

相关TAG标签 脚本 实例
上一篇:shell实现,利用mysqld_multi自动做多实例从库:使用帮助
下一篇:shell实战之:定时分析nginx日志,并将对本站使用webscan的同学挡住
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站