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=/root/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
# Mysql安装主目录,示例:INSTALL_HOME=/usr/local/mysql
readonly INSTALL_HOME=/usr/local/mysql
# 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
# 修改basedirdatadir
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脚本大神觉得写得不对的地方请留言指正

 

  1. #!/bin/bash
  2.  
    # Mysql安装包所在路径,需要带上包名,示例:PACKAGE_FULL_WAY=/root/mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
  3.  
    readonly PACKAGE_FULL_WAY=
  4.  
    # Mysql安装主目录,示例:INSTALL_HOME=/usr/local/mysql
  5.  
    readonly INSTALL_HOME=
  6.  
    # Mysql数据库root用户密码,示例:USER_PASSWD=root
  7.  
    readonly USER_PASSWD=
  8.  
     
  9.  
    #check user
  10.  
    if [[ "$UID" -ne 0 ]]; then
  11.  
    echo "ERROR: the script must run as root"
  12.  
    exit 3
  13.  
    fi
  14.  
     
  15.  
    function log_info() {
  16.  
    echo "[$(date -d today +"%Y-%m-%d %H:%M:%S %:::z")] $1"
  17.  
    }
  18.  
     
  19.  
    function log_error() {
  20.  
    echo -e "[$(date +"%Y-%m-%d %H:%M:%S %Z%:z")] [ERROR] $* \n"
  21.  
    exit 1
  22.  
     
  23.  
    }
  24.  
     
  25.  
    function check_result() {
  26.  
    local ret_code=$1
  27.  
    shift
  28.  
    local error_msg=$*
  29.  
    if [[ ${ret_code} -ne 0 ]]; then
  30.  
    log_error ${error_msg}
  31.  
    fi
  32.  
    }
  33.  
     
  34.  
    # 校验参数
  35.  
    function check_param() {
  36.  
    if [[ ! -n ${PACKAGE_FULL_WAY} ]] || [[ ! -n ${INSTALL_HOME} ]] || [[ ! -n ${USER_PASSWD} ]]; then
  37.  
    log_error "Param: PACKAGE_FULL_WAY INSTALL_HOME USER_PASSWD can not be null"
  38.  
    fi
  39.  
    if [[ ! -f ${PACKAGE_FULL_WAY} ]]; then
  40.  
    log_error "Please check the config of PACKAGE_FULL_WAY dose config Mysql package name"
  41.  
    fi
  42.  
    }
  43.  
     
  44.  
    function check_mysql_process() {
  45.  
    local mysql_process_count=`ps -ef |grep ${INSTALL_HOME}|grep -vwE "grep|vi|vim|tail|cat"|wc -l`
  46.  
    if [[ ${mysql_process_count} -gt 0 ]]; then
  47.  
    log_error "please stop and uninstall the mysql first"
  48.  
    fi
  49.  
    }
  50.  
     
  51.  
    # 新建mysql用户
  52.  
    function add_user() {
  53.  
    #create group mysql
  54.  
    grep "^mysql" /etc/group &> /dev/null
  55.  
    if [[ $? -ne 0 ]]; then
  56.  
    groupadd mysql
  57.  
    fi
  58.  
     
  59.  
    #create user mysql
  60.  
    id mysql &> /dev/null
  61.  
    if [[ $? -ne 0 ]]; then
  62.  
    useradd -g mysql mysql
  63.  
    chage -M 99999 mysql
  64.  
    fi
  65.  
    }
  66.  
     
  67.  
    # 安装Mysql
  68.  
    function install_mysql() {
  69.  
    # 创建安装主目录
  70.  
    mkdir -p ${INSTALL_HOME}
  71.  
    # 解压mysql到安装主目录
  72.  
    tar -zxvf ${PACKAGE_FULL_WAY} -C ${INSTALL_HOME} > /dev/null 2>&1
  73.  
    check_result $? "unzip Mysql package error"
  74.  
    local package_name=`ls ${INSTALL_HOME} |grep mysql`
  75.  
    mv ${INSTALL_HOME}/${package_name}/* ${INSTALL_HOME}
  76.  
    rm -rf ${INSTALL_HOME}/${package_name}
  77.  
    cd ${INSTALL_HOME}
  78.  
     
  79.  
    # 新建数据库目录
  80.  
    mkdir -p ${INSTALL_HOME}/data/mysql
  81.  
    chown -R mysql:mysql ${INSTALL_HOME}
  82.  
     
  83.  
    # 安装并指定用户和data文件夹位置
  84.  
    ./scripts/mysql_install_db --user=mysql --datadir=${INSTALL_HOME}/data/mysql
  85.  
     
  86.  
    # 复制mysql到服务自动启动里面
  87.  
    cp -pf ${INSTALL_HOME}/support-files/mysql.server /etc/init.d/mysqld
  88.  
    chmod 755 /etc/init.d/mysqld
  89.  
    # 复制配置文件到etc下
  90.  
    cp -pf ${INSTALL_HOME}/support-files/my-default.cnf /etc/my.cnf
  91.  
    chmod 755 /etc/my.cnf
  92.  
    # 修改basedir和datadir
  93.  
    sed -i "s#^basedir=.*#basedir=${INSTALL_HOME}#" /etc/init.d/mysqld
  94.  
    sed -i "s#^datadir=.*#datadir=${INSTALL_HOME}\/data\/mysql#" /etc/init.d/mysqld
  95.  
    # 加入环境变量,方便使用mysql命令,但是需要source /etc/profile
  96.  
    echo "###MYSQL_PATH_ENV_S" >>/etc/profile
  97.  
    echo "export PATH=${INSTALL_HOME}/bin:\$PATH" >> /etc/profile
  98.  
    echo "###MYSQL_PATH_ENV_E" >> /etc/profile
  99.  
    # 启动Mysql
  100.  
    start
  101.  
    # 修改Mysql用户root密码
  102.  
    ./bin/mysqladmin -u root -h localhost.localdomain password ${USER_PASSWD}
  103.  
    cd ${INSTALL_HOME}
  104.  
     
  105.  
    # 开启远程登录权限
  106.  
    ./bin/mysql -h127.0.0.1 -uroot -p${USER_PASSWD} << EOF
  107.  
    grant all privileges on *.* to root@'%' identified by 'root'; flush privileges;
  108.  
    EOF
  109.  
    chown -R mysql:mysql ${INSTALL_HOME}
  110.  
    }
  111.  
     
  112.  
    # 安装Mysql
  113.  
    function install() {
  114.  
    log_info "+++++++++++ step 1 ++++++++++++++++"
  115.  
    check_param
  116.  
    log_info "check_param finish"
  117.  
     
  118.  
    log_info "+++++++++++ step 2 ++++++++++++++++"
  119.  
    check_mysql_process
  120.  
    log_info "check_mysql_process finish"
  121.  
     
  122.  
    log_info "+++++++++++ step 3 ++++++++++++++++"
  123.  
    add_user
  124.  
    log_info "add_user finish"
  125.  
     
  126.  
    log_info "+++++++++++ step 4 ++++++++++++++++"
  127.  
    install_mysql
  128.  
    log_info "install_mysql finish"
  129.  
    }
  130.  
     
  131.  
    # 卸载Mysql
  132.  
    function uninstall() {
  133.  
    # 如果Mysql仍启动则停止Msql
  134.  
    local mysql_process_count=`ps -ef |grep ${INSTALL_HOME}|grep -vwE "grep|vi|vim|tail|cat"|wc -l`
  135.  
    if [[ ${mysql_process_count} -gt 0 ]]; then
  136.  
    stop
  137.  
    fi
  138.  
     
  139.  
    # 删除创建的文件
  140.  
    rm -rf ${INSTALL_HOME}
  141.  
    rm -rf /etc/init.d/mysqld
  142.  
    rm -rf /etc/my.cnf
  143.  
     
  144.  
    # 删除sock文件
  145.  
    if [[ -f /tmp/mysql.sock ]]; then
  146.  
    rm -rf /tmp/mysql.sock
  147.  
    fi
  148.  
     
  149.  
    # 删除配置的环境变量
  150.  
    sed -i '/###MYSQL_PATH_ENV_S/,/###MYSQL_PATH_ENV_E/d' /etc/profile
  151.  
     
  152.  
    #删除用户和用户组
  153.  
    id mysql &> /dev/null
  154.  
    if [[ $? -eq 0 ]]; then
  155.  
    userdel mysql
  156.  
    fi
  157.  
    log_info "uninstall Mysql success"
  158.  
    }
  159.  
     
  160.  
    # 停止Mysql
  161.  
    function stop() {
  162.  
    su - mysql -c "service mysqld stop"
  163.  
    }
  164.  
     
  165.  
    # 启动Mysql
  166.  
    function start() {
  167.  
    su - mysql -c "service mysqld start"
  168.  
    }
  169.  
     
  170.  
    # Mysql状态检查
  171.  
    function check_status() {
  172.  
    su - mysql -c "service mysqld status"
  173.  
    }
  174.  
     
  175.  
    function usage() {
  176.  
    echo "Usage: $PROG_NAME {start|stop|install|uninstall|check_status}"
  177.  
    exit 2
  178.  
     
  179.  
    }
  180.  
     
  181.  
    PROG_NAME=$0
  182.  
    ACTION=$1
  183.  
     
  184.  
    case "$ACTION" in
  185.  
    start)
  186.  
    start
  187.  
    ;;
  188.  
    stop)
  189.  
    stop
  190.  
    ;;
  191.  
    restart)
  192.  
    stop
  193.  
    start
  194.  
    ;;
  195.  
    install)
  196.  
    install
  197.  
    ;;
  198.  
    uninstall)
  199.  
    uninstall
  200.  
    ;;
  201.  
    check_status)
  202.  
    check_status
  203.  
    ;;
  204.  
    *)
  205.  
    usage
  206.  
    ;;
  207.  
    esac
posted @ 2020-10-13 12:13  磊~哥  阅读(121)  评论(0编辑  收藏  举报