美文网首页
Linux 使用shell安装mysql5.7

Linux 使用shell安装mysql5.7

作者: 爱恨_交加 | 来源:发表于2021-12-01 17:50 被阅读0次

下载MySQL安装包

官网地址:https://downloads.mysql.com/archives/community/

脚本安装

测试环境

  • 全新CentOS 7.9【CentOS Linux release 7.9.2009 (Core)】环境下
  • root用户
  • mysql-5.7.33-linux-glibc2.12-x86_64

备注:已对脚本所有的功能点进行测试[start|stop|restart|status|install|uninstall],可以放心食用。

脚本内容如下

#!/bin/bash

# MySQL安装包所在路径,需要带上包名。示例:PACKAGE_FULL_PATH=/root/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
readonly PACKAGE_FULL_PATH=/root/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
# MySQL安装主目录。示例:INSTALL_HOME=/usr/local/mysql
readonly INSTALL_HOME=/usr/local/mysql
# MySQL数据库root用户密码。示例:123456
readonly USER_PASSWD=123456

# 检查是否为root用户
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_PATH} ]] || [[ ! -n ${INSTALL_HOME} ]] || [[ ! -n ${USER_PASSWD} ]]; then
        log_error "Param: PACKAGE_FULL_PATH INSTALL_HOME USER_PASSWD can not be null"
    fi
    if [[ ! -f ${PACKAGE_FULL_PATH} ]]; then
        log_error "Param: PACKAGE_FULL_PATH is not a directory"
    fi
}

# 检查mysql进程是否存在
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用户组,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 -r -g mysql -s /bin/false mysql
    fi
}

# 初始化my.cnf
function init_my_cnf(){
echo "
[mysql]
default-character-set=utf8mb4

[mysqld]
character_set_server=utf8mb4

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
" > /etc/my.cnf
}


# 安装MySQL
function install_mysql(){

    rpm -e --nodeps $(rpm -qa | grep mariadb)

    # 创建安装主目录
    mkdir -p ${INSTALL_HOME}
    # 解压mysql安装包到安装主目录
    tar -zxvf ${PACKAGE_FULL_PATH} -C ${INSTALL_HOME} > /dev/null 2>&1
    echo ">>> tar finish"
    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}

    # 创建一个自由目录,可用于dump等操作
    mkdir mysql-files
    chown mysql:mysql mysql-files
    chmod 750 mysql-files

    # 安装并指定用户
    ./bin/mysqld --initialize-insecure --user=mysql
    echo ">>> mysqld finish"
    ./bin/mysql_ssl_rsa_setup
    ./bin/mysqld_safe --user=mysql &
    echo ">>> mysqld_safe finish"

    # 初始化my.cnf
    init_my_cnf

    #配置自启动
    cp -pf ${INSTALL_HOME}/support-files/mysql.server /etc/init.d/mysql.server
    chmod 755 /etc/init.d/mysql.server
    systemctl daemon-reload
    chkconfig --add mysql.server

    # 添加环境变量
    echo "### MySQL_PATH_ENV_S" >> /etc/profile
    echo "export PATH=${INSTALL_HOME}/bin:\$PATH" >> /etc/profile
    echo "### MySQL_PATH_ENV_E" >> /etc/profile

    # 启动MySQL
    echo ">>> Start MySQL"
    start

    sleep 3

    cd ${INSTALL_HOME}
# 修改MySQL用户的root密码
./bin/mysql -uroot << EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '${USER_PASSWD}';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${USER_PASSWD}' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
}

# 启动MySQL
function start() {
    systemctl start mysql
}

# 停止MySQL
function stop() {
    systemctl stop mysql
}

# 检查MySQL状态
function status() {
    systemctl status mysql
}

# 安装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仍启动则停止
    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/mysql.server
    rm -rf /etc/my.cnf
    rm -rf /tmp/mysql.sock*

    # 删除配置的环境变量
    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"
}

# 命令帮助
function usage() {
    echo "Usage: $PROG_NAME {start|stop|restart|status|install|uninstall}"
    exit 2
}

# 主流程

PROG_NAME=$0
ACTION=$1

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

操作步骤
1、使用root用户登录Linux服务器,在任意目录下执行命令vi manager_mysql.sh
2、按下Insert键,复制上述的脚本内容,然后鼠标右键粘贴进去
3、修改脚本配置
  - PACKAGE_FULL_PATH :指定tar位置
  - INSTALL_HOME :指定MySQL安装到哪里
  - USER_PASSWD :指定数据库root用户登录时使用的密码
  - my.cnf :添加一些的配置
4、修改完后按一下Esc键,然后输入:wq!
5、执行一下source /etc/profile,以方便可以在任意目录下执行mysql相关命令
6、执行你想执行的命令

命令 释义
sh manager_mysql.sh install 安装
sh manager_mysql.sh status 状态
sh manager_mysql.sh start 启动
sh manager_mysql.sh stop 停止
sh manager_mysql.sh restart 重启
sh manager_mysql.sh uninstall 卸载

也可以使用systemctl对MySQL进行启动、停止和状态检查
  状态:systemctl status mysql
  启动:systemctl start mysql
  停止:systemctl stop mysql

验证

1、窗口

# 查看MySQL运行状态
sh manager_mysql.sh status
# 登录,然后输入密码【上述脚本内容中变量USER_PASSWD的值】
mysql -uroot -p

2、通过Navicat验证远程登录

相关文章

网友评论

      本文标题:Linux 使用shell安装mysql5.7

      本文链接:https://www.haomeiwen.com/subject/pchsxrtx.html