shell使用mysqld_multi自动做多实例从库脚本

2019-09-23 09:41:10王冬梅

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 <<FFF
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 statusG"
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 "已经删除,请刷新从库监控"
}