前言:(1)該腳本可在任意路徑運行,只需能夠連接外網,會自動下載所需軟件包並安裝。
(2)該腳本內mysql版本爲mysql-5.6.25。
(3)爲提高腳本自由度,該腳本部署中,需要手動指定IP、同步用戶名、同步密碼,安裝中按照提示輸入即可。
別的就不多說啦,大家自己體驗吧,歡迎意見和批評 !
圖解如下:
(1)主菜單
主菜單選項如下圖,共7個選項,可輸入該選項內容分別執行選項中的內容。其中可輸入help查看幫助,可輸入q退出腳本。
(2)然後是install選項,該選項爲軟件包的下載與安裝。輸入install回車,腳本會自行下載所需軟件包進行安裝,由於mysql安裝時間比較長,這裏並沒有隱藏安裝過程,更方便查看安裝進度。
(3)mysql服務調整
這裏輸入server,腳本會自行修改mysql一些配置信息,將mysql加入系統服務,並對mysql進行初始化。爲實驗方便這裏暫時關閉了防火牆。
注:2、3兩個步驟需在master端和slave端都執行。
(4)master部署
該步驟需在master端執行,進行master的部署,期間需要手動輸入slave端IP地址,需要授權的用戶名和密碼。
需記下mysql-bin的編號(即後邊的數字000001)和POS點(即410)。
(5)slave部署
這一步,輸入slave後需要手工指定master端IP,及master端的mysql-bin編號及POS點數據。並輸入同步用戶名及祕密(需於master設置的用戶名及密碼一致)。
(6)查看狀態:
master及slave都建立好後,可以在slave上查看slave狀態,來確定是否部署成功及狀態是否正常。
(7)測試:
我們在master端數據庫內創建一個新數據庫
然後查看slave端數據庫,新數據庫已自動同步到slave上,mysql主從同步建立成功!
腳本代碼如下:
#!/bin/bash
#by LiuPengfang -----2015/08/07
#Auto-mysql_master-slave
#---------------------------------菜單--------------------------------------
echo "----------------------------------------------------"
echo -e "\033[36m----------歡迎使用Mysql主從自動搭建平臺-------------\033[0m"
echo "----------------------------------------------------"
echo "請按照選項進行安裝及部署:"
echo "----------------------------------------------------"
echo "|【install】| 軟件包下載及安裝 |"
echo "----------------------------------------------------"
echo "|【server】 | Mysql服務調整 |"
echo "----------------------------------------------------"
echo "|【master】 | Master部署 |"
echo "----------------------------------------------------"
echo "|【slave】 | Slave部署 |"
echo "----------------------------------------------------"
echo "|【monitor】| 查看監控狀態 |"
echo "----------------------------------------------------"
echo "|【help】 | 幫助 |"
echo "----------------------------------------------------"
echo "|【q】 | 退出 |"
echo "----------------------------------------------------"
#---------------------------------下載安裝------------------------
function HELP (){
echo -e "\033[33m
-------------------------------------------------------------------------
(1)該腳本可在任意路徑運行。
(2)可手動按需求選擇選項進行安裝及狀態查看。
(3)該腳本安裝的mysql默認無密碼,可在腳本安裝後自行設定mysql密碼。
(4)該腳本安裝的mysql版本爲-5.6.25,若需要其他版本請更改腳本內的軟件源。
(5)該腳本需要手動指定IP、同步用戶名、同步密碼,按照提示輸入即可
-------------------------------------------------------------------------\033[0m"
}
#------------------------------------help--------------------------
function INSTALL (){
mkdir /mysqldir ; cd /mysqldir
echo -e "\033[35m正在下載軟件包,請等待……\033[0m"
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.25.tar.gz &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35m軟件包下載成功!\033[0m"
else
echo -e "\033[35m軟件包下載失敗,請檢查網絡或下載源!\033[0m"
exit
fi
echo -e "\033[35m正在解壓軟件包……\033[0m"
tar vxf mysql-5.6.25.tar.gz &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35m解壓成功!\033[0m"
else
echo -e "\033[35m解壓失敗!\033[0m"
exit
fi
cd mysql-5.6.25
echo -e "\033[35m正在安裝cmake軟件包……\033[0m"
yum install cmake -y &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35mcmake安裝成功!\033[0m"
else
echo -e "\033[35mcmake安裝失敗!\033[0m"
exit
fi
echo -e "\033[35m正在安裝mysql,時間較長請耐心等待……\033[0m"
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.6 &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35mmysql預編譯成功!\033[0m"
else
echo -e "\033[35mmysql預編譯失敗!\033[0m"
exit
fi
make && make install
if [ $? -eq 0 ];then
echo-e "\033[35mmysql安裝成功!\033[0m"
else
echo-e "\033[35mmysql安裝失敗!\033[0m"
exit
fi
}
#---------------------------------服務調整-----------------------------------
function SERVER (){
echo -e "\033[35m添加mysql用戶……\033[0m"
useradd mysql
echo -e "\033[35m正在進行mysql服務調整……\033[0m"
chown -R mysql.mysql /usr/local/mysql5.6
cp /usr/local/mysql5.6/support-files/mysql.server /etc/rc.d/init.d/mysql
chkconfig --add mysql
chkconfig --level 35 mysql on
\cp /usr/local/mysql5.6/support-files/my-default.cnf /etc/my.cnf
cd /usr/local/mysql5.6/
echo -e "\033[35mmysql初始化mysql……\033[0m"
scripts/mysql_install_db --user=mysql &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35mmysql初始化成功!\033[0m"
else
echo -e "\033[35mmysql初始化失敗!\033[0m"
exit
fi
echo -e "\033[35m重啓mysql服務……\033[0m"
service mysql start &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35mmysql服務啓動成功!\033[0m"
else
echo -e "\033[35mmysql服務啓動失敗!\033[0m"
exit
fi
alias mysql='/usr/local/mysql5.6/bin/mysql'
echo -e "\033[35m關閉防火牆……\033[0m"
service iptables stop &>/dev/null
}
#---------------------------------Master部署----------------------------------
function MASTER (){
cat /etc/my.cnf |grep "log-bin=mysql-bin"
if [ $? -eq 0 ];then
echo -e "\033[35m配置信息已存在。\033[0m"
else
sed -i 's/\[mysqld\]/&\nlog-bin=mysql-bin\nserver-id = 1/' /etc/my.cnf
echo -e "\033[35m配置信息導入成功!\033[0m"
fi
echo -e "\033[35m重啓mysql服務……\033[0m"
service mysql restart &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35mmysql服務啓動成功!\033[0m"
else
echo -e "\033[35mmysql服務啓動失敗!\033[0m"
exit
fi
read -p "請輸入slave服務器IP:" i
read -p "請輸入同步使用的用戶名:" USER_MY
read -p "請輸入同步使用的密碼:" PASS_MY
/usr/local/mysql5.6/bin/mysql -uroot -e "grant replication slave on *.* to '$USER_MY'@'$i' identified by '$PASS_MY';"
/usr/local/mysql5.6/bin/mysql -uroot -e "flush privileges;"
MY_BIN=`/usr/local/mysql5.6/bin/mysql -uroot -e "show master status;"|grep "mysql-bin."|awk '{print $1}'|awk -F "." '{print $2}'`
MY_POS=`/usr/local/mysql5.6/bin/mysql -uroot -e "show master status;"|grep "mysql-bin."|awk '{print $2}'`
echo -e "\033[36m您的mysql-編號爲:$MY_BIN\033[0m"
echo -e "\033[36m您的mysql-POS點爲:$MY_POS\033[0m"
}
#---------------------------------Slave部署-----------------------------------
function SLAVE (){
cat /etc/my.cnf |grep "server-id = 2"
if [ $? -eq 0 ];then
echo -e "\033[35mmysql配置信息已存在。\033[0m"
else
sed -i 's/\[mysqld\]/&\nserver-id = 2/' /etc/my.cnf
echo -e "\033[35mmysql配置信息導入成功!\033[0m"
fi
echo -e "\033[35m重啓mysql服務……\033[0m"
service mysql restart &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[35mmysql服務啓動成功!\033[0m"
else
echo -e "\033[35mmysql服務啓動失敗!\033[0m"
exit
fi
read -p "請輸入master服務IP:" i
read -p "請輸入master mysql-編號:" MY_BIN
read -p "請輸入master mysql-POS:" MY_POS
read -p "請輸入同步使用的用戶名:" USER_MY
read -p "請輸入同步使用的密碼:" PASS_MY
/usr/local/mysql5.6/bin/mysql -uroot -e "change master to master_host='$i',master_user='$USER_MY',master_password='$PASS_MY',master_log_file='mysql-bin.$MY_BIN',master_log_pos=$MY_POS;"
/usr/local/mysql5.6/bin/mysql -uroot -e "flush privileges;"
/usr/local/mysql5.6/bin/mysql -uroot -e "start slave;"
}
#---------------------------------監控同步狀態-------------------------------
function MONITOR (){
SLAVE_IO=`/usr/local/mysql5.6/bin/mysql -uroot -e "show slave status\G;"|grep "Slave_IO_Running:"|sed 's/ //g'|awk -F ":" '{print $2}'`
SLAVE_SQL=`/usr/local/mysql5.6/bin/mysql -uroot -e "show slave status\G;"|grep "Slave_SQL_Running:"|sed 's/ //g'|awk -F ":" '{print $2}'`
if [[ $SLAVE_IO = Yes ]];then
echo -e "\033[36mThe Slave_IO is Yes!\033[0m"
elif [[ $SLAVE_IO = Connecting ]];then
echo -e "\033[36m請檢查您的防火牆配置!\033[0m"
else
echo -e "\033[36mThe Slave_IO is NO!\033[0m"
exit
fi
if [[ $SLAVE_SQL = Yes ]];then
echo -e "\033[36mThe Slave_IO is Yes!\033[0m"
elif [[ $SLAVE_SQL = Connecting ]];then
echo -e "\033[36m請檢查您的防火牆配置!\033[0m"
else
echo -e "\033[36mThe Slave_IO is NO!\033[0m"
exit
fi
if [[ $SLAVE_IO = Yes && $SLAVE_SQL = Yes ]];then
echo -e "\033[35mMysql主從同步建立成功!\033[0m"
else
echo -e "\033[35mMysql主從同步建立失敗!\033[0m"
fi
}
#--------------------------------模塊調用-------------------------------------
read -p "請輸入您要進行的選項:" i
PATH_AUTO=$(pwd)
case $i in
install)
INSTALL
cd $PATH_AUTO ; sh auto_mysql_M-S.sh
;;
server)
SERVER
cd $PATH_AUTO ; sh auto_mysql_M-S.sh
;;
master)
MASTER
cd $PATH_AUTO ; sh auto_mysql_M-S.sh
;;
slave)
SLAVE
cd $PATH_AUTO ; sh auto_mysql_M-S.sh
;;
monitor)
MONITOR
cd $PATH_AUTO ; sh auto_mysql_M-S.sh
;;
help)
HELP
cd $PATH_AUTO ; sh auto_mysql_M-S.sh
;;
q)
exit
;;
*)
echo -e "\033[36m請輸入正確選項!\033[0m"
cd $PATH_AUTO ; sh auto_mysql_M-S.sh
;;
esac