Centos7安装mysql5.7.22脚本

写在前面:

本人shell小白,本脚本基于他人写的脚本进行的二次编写,主要用于今后部署mysql时方便查询。由于某些原因不好找到源码出处,就无法列出源码链接了,特此声明,还望原作者谅解。
本脚本仍有许多地方有待优化,但用于一个简单的自动化部署绰绰有余。

自动化安装脚本

#!/bin/bash
# Mysql安装包所在路径,需要带上包名,示例:PACKAGE_FULL_WAY=/root/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
readonly PACKAGE_FULL_WAY=/root/mysql-5.7.22-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=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_WAY} ]] || [[ ! -n ${INSTALL_HOME} ]] || [[ ! -n ${USER_PASSWD} ]]; then
        log_error "参数:PACKAGE_FULL_WAY INSTALL_HOME USER_PASSWD 不能为null"
    fi
    if [[ ! -f ${PACKAGE_FULL_WAY} ]]; then
        log_error "请校验mysql安装包的路径"
    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 "请先停止或者卸载mysql"
    fi
}

# 清除影响安装mysql的不良因素
function clear_mysql_environment() {
		#删除linux中原本的数据库
		local rpmfile=$(rpm -qa | grep mariadb)
		if [[ -n ${rpmfile} ]]; then
		rpm -e --nodeps $rpmfile
		fi
		#删除旧的mysql
		local rpmmysql=$(rpm -qa | grep mysql)
		if [[ -n ${rpmmysql} ]]; then
		rpm -e --nodeps $rpmmysql
		fi
		#删除含有mysql的文件
		local file=$(find / -name mysql)
		if [[ -n ${file} ]]; then
		rm -rf $file
		fi
		#删除原本的mysql配置文件
		local configfile=$(find /etc -name my.cnf)
		if [[ -n ${configfile} ]]; then
		rm -rf $configfile
		fi
}

# 初始化my.cnf,按需配置
function init_my_conf() {
    local host_ip=$(/sbin/ip route get 1| sed 's/^.*src \(\S*\).*$/\1/;q')
    local total_mem=`free -m |grep "Mem"|awk '{print $2}'`
 
    mkdir -p ${INSTALL_HOME}/log
    mkdir -p ${INSTALL_HOME}/mysqld
    touch ${INSTALL_HOME}/mysqld/mysqld.pid
    chown mysql.mysql ${INSTALL_HOME}/mysqld/mysqld.pid
    touch ${INSTALL_HOME}/log/mysql-error.log
    touch ${INSTALL_HOME}/log/mysql-slow.log
    touch ${INSTALL_HOME}/log/mysqld.log
    chown mysql.mysql -R ${INSTALL_HOME}/log
 
echo "[client]
port = 3306
default-character-set=UTF8
[mysql]
default-character-set=UTF8
[mysqld]
port = 3306
character-set-server = utf8
basedir = ${INSTALL_HOME}
datadir = ${INSTALL_HOME}/data/mysql
pid-file = ${INSTALL_HOME}/mysql.pid
user = mysql

lower_case_table_names = 1
[mysqld_safe]
log-error=${INSTALL_HOME}/log/mysqld.log" >/etc/my.cnf
 
    chown mysql.mysql /etc/my.cnf
}

# 新建mysql用户
function add_user() {
    #如果mysql组不存在则创建mysql组
    grep "^mysql" /etc/group &> /dev/null
    if [[ $? -ne 0 ]]; then
        groupadd mysql
    fi
 
    #如果mysql用户不存在则创建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
	if [[ $? -eq 0 ]]; then
	local package_name=`ls ${INSTALL_HOME} |grep mysql`
	mv ${INSTALL_HOME}/${package_name}/* ${INSTALL_HOME}
	cd ${INSTALL_HOME}
 
    # 新建数据库目录
    mkdir -p ${INSTALL_HOME}/data/mysql
    chown -R mysql:mysql ${INSTALL_HOME}	
	# 安装并指定用户和data文件夹位置
	 # 初始化my.cnf,按需配置
    init_my_conf
    ./bin/mysqld --initialize-insecure --user=mysql --basedir=${INSTALL_HOME} --datadir=${INSTALL_HOME}/data/mysql
 # 复制mysql到服务自动启动里面
    cp -pf ${INSTALL_HOME}/support-files/mysql.server /etc/init.d/mysqld
    chmod 755 /etc/init.d/mysqld
    # 修改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 password ${USER_PASSWD}
    cd ${INSTALL_HOME}
 
# 开启远程登录权限
./bin/mysql -hlocalhost -uroot -p${USER_PASSWD} << EOF
grant all privileges on *.* to root@'%' identified by 'root'; flush privileges;
EOF
    chown -R mysql:mysql ${INSTALL_HOME}
	else
	echo "解压mysql失败"
	fi
	
}
# 启动Mysql
function start() {
    su - mysql -c "service mysqld start"
}
# 安装Mysql
function install() {
    log_info "+++++++++++ step 1 ++++++++++++++++"
    check_param
    log_info "check_param finish"
 
    log_info "+++++++++++ step 2 ++++++++++++++++"
    clear_mysql_environment
    log_info "clear_mysql_environment finish"

	log_info "+++++++++++ step 3 ++++++++++++++++"
    check_mysql_process
    log_info "check_mysql_process finish"
 
	log_info "+++++++++++ step 4 ++++++++++++++++"
    add_user
    log_info "add_user finish"
 
 
    log_info "+++++++++++ step 5 ++++++++++++++++"
    install_mysql
    log_info "install_mysql finish"
	source /etc/profile
}
# 停止Mysql
function stop() {
    su - mysql -c "service mysqld stop"
}
 
# 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

使用

# 设置脚本权限
chmod +x 脚本名称
# 使用脚本安装mysql
. 脚本名称 install
# 使用脚本启动mysql服务
. 脚本名称 start
# 使用脚本停止mysql服务
. 脚本名称 stop
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值