Linux环境使用Shell脚本安装Mysql

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服务器的任意位置上

3. 配置脚本

        脚本内容如下

#!/bin/bash

 

# Mysql安装包所在路径,需要带上包名,示例:PACKAGE_FULL_WAY=/root/mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz

PACKAGE_FULL_WAY=

# Mysql安装主目录,示例:INSTALL_HOME=/usr/local/mysql

INSTALL_HOME=

# Mysql数据库root用户密码,示例:USER_PASSWD=root

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

}

 

CHECK_RESULT()

{

    RETCODE=$1

    shift

    ERROR_MSG=$*

    if [[ ${RETCODE} -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 -v grep|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

    #chown -R root:root ./

    #chown -R mysql:mysql data

    # 复制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

}

 

# 安装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 -v grep|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

    # 删除配置的环境变量

    sed -i '/###MYSQL_PATH_ENV_S/,/###MYSQL_PATH_ENV_E/d' /etc/profile

    source /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 # bad usage

}

 

PROG_NAME=$0

ACTION=$1

 

#check usage

if [[ $# -lt 1 ]]; then

    usage

    exit 2

fi

 

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脚本大神觉得写得不对的地方请留言指正

猜你喜欢

转载自blog.csdn.net/u011294519/article/details/89004581