数据库服务之 Mysql8.x 服务脚本安装
Mysql介绍
MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL作为网站数据库。
脚本内容:
!/bin/bash
#
#********************************************************************
#Author: wwtou
#Date: 2025-04-18
#FileName: mysql_install_v8.sh
#Description: The test script for OS Version greater than 8.0
#Copyright (C): 2020 All rights reserved
#********************************************************************
# Defined Variable
MYSQL_VER="8.0.40"
MYSQL_FILE="mysql-${MYSQL_VER}-linux-glibc2.28-x86_64.tar.xz"
MYSQL_URL="https://downloads.mysql.com/archives/get/p/23/file/"
SRC_DIR="/tools"
MYSQL_BASE_DIR="/app"
MYSQL_INSTALL_DIR="${MYSQL_BASE_DIR}/mysql"
MYSQL_DATA_DIR="/data/3306"
MYSQL_BINLOG_DIR="/data/binlog"
MYSQL_LOG_DIR="/data/log"
MYSQL_CONFILE="/etc/my.cnf"
MYSQL_COMMAND_FILE="/etc/profile.d/mysqld.sh"
USER="mysql"
GROUP="mysql"
MYSQL_PORT=3306
SERVERID=$(hostname -I | awk -F'.' '{print $4}')
. /etc/os-release
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
check () {
[ -e ${MYSQL_INSTALL_DIR} ] && { color "MYSQL SERVER 已安装,请卸载后再安装" 1; exit; }
[ ! -d ${MYSQL_BASE_DIR} ] && mkdir -p ${MYSQL_BASE_DIR}
[ ! -d ${MYSQL_DATA_DIR} ] && mkdir -p ${MYSQL_DATA_DIR}
[ ! -d ${MYSQL_BINLOG_DIR} ] && mkdir -p ${MYSQL_BINLOG_DIR}
[ ! -d ${MYSQL_LOG_DIR} ] && mkdir -p ${MYSQL_LOG_DIR}
SELINUX_CODE=$(getenforce)
if [ ${SELINUX_CODE} = 'Disabled' ]; then
color 'Selinux 已经关闭' 0
else
setenforce 0
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
color 'Selinux 已经临时关闭,重启后彻底生效' 0
fi
if firewall-cmd --state &>/dev/null; then
systemctl disable --now firewalld.service &>/dev/null
#firewall-cmd --add-service=http --permanent
#firewall-cmd --add-service=https --permanent
#firewall-cmd --add-port=8012/tcp --permanent
#firewall-cmd --add-port=8013/tcp --permanent
#firewall-cmd --reload
color '已关闭防火墙' 0
else
color '防火墙已关闭' 0
fi
color "安装工具包" 0
if egrep -i 'centos|rocky|anolis|rhel' /etc/os-release &>/dev/null; then
dnf -y install tar bash-completion vim-enhanced wget
else
apt update; apt -y install tar bash-completion vim-enhanced wget
fi
[ ! -d ${SRC_DIR} ] && mkdir ${SRC_DIR}
cd ${SRC_DIR}
if [ -e ${SRC_DIR}/${MYSQL_FILE} ];then
color "相关文件已准备好" 0
else
color '开始下载 MYSQL 源码包' 0
wget ${MYSQL_URL}${MYSQL_FILE}
[ $? -ne 0 ] && { color "下载 ${MYSQL_FILE}文件失败" 1; exit; }
fi
}
install () {
color "开始安装 MYSQL" 0
if id $USER &> /dev/null;then
color "$USER 用户已存在" 1
else
groupadd $GROUP
useradd -r -g $GROUP -s /sbin/nologin $USER
color "创建 $USER 用户" 0
fi
color "开始安装 MYSQL 依赖包" 0
if egrep -i 'centos|rocky|anolis|rhel' /etc/os-release &>/dev/null; then
dnf -y install gcc make openssl-devel libaio-devel numactl
else
apt update; apt -y install gcc make openssl libssl-dev openssl-dev libaio-dev numactl
fi
cd $SRC_DIR
tar -xvf ${MYSQL_FILE} -C ${MYSQL_BASE_DIR}
MYSQL_DIR=$(echo ${MYSQL_FILE} | sed -nr 's/^(.*[0-9]).*/\1/p')
#cd ${MYSQL_BASE_DIR}
#ln -s $(echo ${MYSQL_FILE} | sed -nr 's/^(.*[0-9]).*/\1/p') ${MYSQL_INSTALL_DIR}
ln -s ${MYSLQ_BASE_DIR}/${MYSQL_DIR} ${MYSQL_INSTALL_DIR}
# initialized databases
${MYSQL_INSTALL_DIR}/bin/mysqld --initialize-insecure --lower_case_table_names=1 --user=$USER --basedir=${MYSQL_INSTALL_DIR} --datadir=${MYSQL_DATA_DIR}
[ $? -eq 0 ] && color "MYSQL 初始化安装成功" 0 || { color "MYSQL 安装失败,退出!" 1 ;exit; }
# chown BaseDir and DataDir
chown -R $USER:$GROUP ${MYSQL_DATA_DIR} ${MYSQL_LOG_DIR} ${MYSQL_BINLOG_DIR}
chown -R $USER:root ${MYSLQ_BASE_DIR}/${MYSQL_DIR}
# configuration environment variable
echo "export PATH=${MYSQL_INSTALL_DIR}/bin:\$PATH" > ${MYSQL_COMMAND_FILE}
cat > ${MYSQL_CONFILE} <<EOF
[mysql]
socket = /tmp/mysql.sock
default-character-set=utf8mb4
[mysqld]
user = $USER
basedir = ${MYSQL_INSTALL_DIR}
datadir = ${MYSQL_DATA_DIR}
server_id = $SERVERID
port = ${MYSQL_PORT}
socket = /tmp/mysql.sock
# 忽略大小写,加在在5.6/5.7低版本的mysql配置文件中有效. 8版本只能在初始化时指定,然后必须配置服务才能启动
lower_case_table_names = 1
innodb_open_files = 1000
#skip-log-bin = 1
log-bin = ${MYSQL_BINLOG_DIR}/mysql-bin
log-error = ${MYSQL_LOG_DIR}/error.log
expire_logs_days = 7
max_binlog_size = 100M
character-set-server = utf8mb4
innodb_file_per_table = 1
skip-name-resolve = 1
innodb_strict_mode = 0
#skip-grant-tables = 1
max_allowed_packet = 1024M
max_connections = 1000
EOF
if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
cat <<-EOF >> /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
EOF
fi
cat > /usr/lib/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
User=$USER
Group=$GROUP
ExecStart=${MYSQL_INSTALL_DIR}/bin/mysqld --defaults-file=${MYSQL_CONFILE}
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target
EOF
# start mysql serivce
echo " start mysql serivce ======>> "
systemctl daemon-reload && systemctl enable --now mysqld.service
sleep 10s
systemctl is-active mysqld &> /dev/null || { color "Mysql Server 启动失败,退出!" 1 ; exit; }
color "MYSQL 安装完成" 0
echo
echo "请先运行: source ${MYSQL_COMMAND_FILE}"
echo
}
check
install
执行脚本
sh mysql_install_v8.sh
通过执行脚本实现一键安装 ~~
转载请注明作者和出处,并添加本页链接。
原文链接:
//www.wwtou.com/vGSSNZyy.html