Linux環境使用Shell腳本安裝Mysql5.6

1. 前言

        之前在Linux上安裝Mysql總是花費很多時間,一行一行執行命令,很是繁瑣,所以決定寫個腳本提升下效率,這個腳本是基於Mysql5.6版本寫的,後續版本不適用,但是如果自己能看懂腳本的可以稍加修改,如果有需要其他版本的自己又不是很熟悉Shell腳本的留言給我。

2. 準備工作

        到Mysql官網或者到華爲軟件倉庫去下載Mysql安裝包

        官網鏈接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads

        有32位和64位的區分 ,根據需要下載

        華爲軟件倉庫:https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.6/

        我下載的版本是mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz

        下載好安裝包後拷貝到Linux服務器的任意位置上

        檢查機器上是否安裝autoconf,執行命令:rpm -qa|grep autoconf

        若無如上輸出,則執行命令安裝:yum -y install autoconf

3. 配置腳本

        腳本內容如下

#!/bin/bash
# Mysql安裝包所在路徑,需要帶上包名,示例:PACKAGE_FULL_WAY=/root/mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
readonly PACKAGE_FULL_WAY=
# Mysql安裝主目錄,示例:INSTALL_HOME=/usr/local/mysql
readonly INSTALL_HOME=
# Mysql數據庫root用戶密碼,示例:USER_PASSWD=root
readonly USER_PASSWD=

#check user
if [[ "$UID" -ne 0 ]]; then
    echo "ERROR: the script must run as root"
    exit 3
fi

function log_info() {
    echo "[$(date -d today +"%Y-%m-%d %H:%M:%S %:::z")] $1"
}

function log_error() {
    echo -e "[$(date +"%Y-%m-%d %H:%M:%S %Z%:z")] [ERROR] $* \n"
    exit 1

}

function check_result() {
    local ret_code=$1
    shift
    local error_msg=$*
    if [[ ${ret_code} -ne 0 ]]; then
        log_error ${error_msg}
    fi
}

# 校驗參數
function check_param() {
    if [[ ! -n ${PACKAGE_FULL_WAY} ]] || [[ ! -n ${INSTALL_HOME} ]] || [[ ! -n ${USER_PASSWD} ]]; then
        log_error "Param: PACKAGE_FULL_WAY INSTALL_HOME USER_PASSWD can not be null"
    fi
    if [[ ! -f ${PACKAGE_FULL_WAY} ]]; then
        log_error "Please check the config of PACKAGE_FULL_WAY dose config Mysql package name"
    fi
}

function check_mysql_process() {
    local mysql_process_count=`ps -ef |grep ${INSTALL_HOME}|grep -vwE "grep|vi|vim|tail|cat"|wc -l`
    if [[ ${mysql_process_count} -gt 0 ]]; then
        log_error "please stop and uninstall the mysql first"
    fi
}

# 新建mysql用戶
function add_user() {
    #create group mysql
    grep "^mysql" /etc/group &> /dev/null
    if [[ $? -ne 0 ]]; then
        groupadd mysql
    fi

    #create user mysql
    id mysql &> /dev/null
    if [[ $? -ne 0 ]]; then
        useradd -g mysql mysql
        chage -M 99999 mysql
    fi
}

# 安裝Mysql
function install_mysql() {
    # 創建安裝主目錄
    mkdir -p ${INSTALL_HOME}
    # 解壓mysql到安裝主目錄
    tar -zxvf ${PACKAGE_FULL_WAY} -C ${INSTALL_HOME} > /dev/null 2>&1
    check_result $? "unzip Mysql package error"
    local package_name=`ls ${INSTALL_HOME} |grep mysql`
    mv ${INSTALL_HOME}/${package_name}/* ${INSTALL_HOME}
    rm -rf ${INSTALL_HOME}/${package_name}
    cd ${INSTALL_HOME}

    # 新建數據庫目錄
    mkdir -p ${INSTALL_HOME}/data/mysql
    chown -R mysql:mysql ${INSTALL_HOME}

    # 安裝並指定用戶和data文件夾位置
    ./scripts/mysql_install_db --user=mysql --datadir=${INSTALL_HOME}/data/mysql

    # 複製mysql到服務自動啓動裏面
    cp -pf ${INSTALL_HOME}/support-files/mysql.server /etc/init.d/mysqld
    chmod 755 /etc/init.d/mysqld
    # 複製配置文件到etc下
    cp -pf ${INSTALL_HOME}/support-files/my-default.cnf /etc/my.cnf
    chmod 755 /etc/my.cnf
    # 修改basedir和datadir
    sed -i "s#^basedir=.*#basedir=${INSTALL_HOME}#" /etc/init.d/mysqld
    sed -i "s#^datadir=.*#datadir=${INSTALL_HOME}\/data\/mysql#" /etc/init.d/mysqld
    # 加入環境變量,方便使用mysql命令,但是需要source /etc/profile
    echo "###MYSQL_PATH_ENV_S" >>/etc/profile
    echo "export PATH=${INSTALL_HOME}/bin:\$PATH" >> /etc/profile
    echo "###MYSQL_PATH_ENV_E" >> /etc/profile
    # 啓動Mysql
    start
    # 修改Mysql用戶root密碼
    ./bin/mysqladmin -u root -h localhost.localdomain password ${USER_PASSWD}
    cd ${INSTALL_HOME}

# 開啓遠程登錄權限
./bin/mysql -h127.0.0.1 -uroot -p${USER_PASSWD} << EOF
grant all privileges on *.* to root@'%' identified by 'root'; flush privileges;
EOF
    chown -R mysql:mysql ${INSTALL_HOME}
}

# 安裝Mysql
function install() {
    log_info "+++++++++++ step 1 ++++++++++++++++"
    check_param
    log_info "check_param finish"

    log_info "+++++++++++ step 2 ++++++++++++++++"
    check_mysql_process
    log_info "check_mysql_process finish"

    log_info "+++++++++++ step 3 ++++++++++++++++"
    add_user
    log_info "add_user finish"

    log_info "+++++++++++ step 4 ++++++++++++++++"
    install_mysql
    log_info "install_mysql finish"
}

# 卸載Mysql
function uninstall() {
    # 如果Mysql仍啓動則停止Msql
    local mysql_process_count=`ps -ef |grep ${INSTALL_HOME}|grep -vwE "grep|vi|vim|tail|cat"|wc -l`
    if [[ ${mysql_process_count} -gt 0 ]]; then
        stop
    fi

    # 刪除創建的文件
    rm -rf ${INSTALL_HOME}
    rm -rf /etc/init.d/mysqld
    rm -rf /etc/my.cnf

    # 刪除sock文件
    if [[ -f /tmp/mysql.sock ]]; then
        rm -rf /tmp/mysql.sock
    fi

    # 刪除配置的環境變量
    sed -i '/###MYSQL_PATH_ENV_S/,/###MYSQL_PATH_ENV_E/d' /etc/profile

    #刪除用戶和用戶組
    id mysql &> /dev/null
    if [[ $? -eq 0 ]]; then
        userdel mysql
    fi
    log_info "uninstall Mysql success"
}

# 停止Mysql
function stop() {
    su - mysql -c "service mysqld stop"
}

# 啓動Mysql
function start() {
    su - mysql -c "service mysqld start"
}

# Mysql狀態檢查
function check_status() {
    su - mysql -c "service mysqld status"
}

function usage() {
    echo "Usage: $PROG_NAME {start|stop|install|uninstall|check_status}"
    exit 2

}

PROG_NAME=$0
ACTION=$1

case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    install)
        install
    ;;
    uninstall)
        uninstall
    ;;
    check_status)
        check_status
    ;;
    *)
        usage
    ;;
esac

        使用root用戶登錄Linxu服務器,在任意目錄下執行命令

        vim mysql_manager.sh

        按一下insert鍵,複製以上的腳本內容,在機器上右鍵粘貼進去

        複製完成後需要修改腳本最上方的三個配置項

PACKAGE_FULL_WAY

Mysql安裝包所在路徑,需要帶上包名

示例:PACKAGE_FULL_WAY=/root/mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz

INSTALL_HOME

Mysql安裝主目錄

示例:INSTALL_HOME=/usr/local/mysql

USER_PASSWD

Mysql數據庫root用戶密碼

示例:USER_PASSWD=root

       修改完成後按一下Esc鍵,鍵盤輸入:wq!即可

       腳本命令:

sh mysql_manager.sh install

安裝並啓動Mysql

sh mysql_manager.sh start

啓動Mysql

sh mysql_manager.sh stop

關閉Mysql

sh mysql_manager.sh restart

重啓Mysql

sh mysql_manager.sh check_status

Mysql狀態檢查

sh mysql_manager.sh uninstall

卸載Mysql

        如果有Shell腳本大神覺得寫得不對的地方請留言指正

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