Mysql主從搭建腳本

前言:(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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章