数据库服务之 Mysql8.x 服务脚本安装

/

Mysql介绍

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL作为网站数据库。
另外 MySQL8.0的生命周期[Apr 2026],彻底绷不住了。直接安装MySQL8.4 LTS版本。


脚本内容:

  1. #!/bin/bash
  2. #
  3. #********************************************************************
  4. #Author: wwtou
  5. #Date: 2025-04-18
  6. #FileName: Mysql_install_8x.sh
  7. #Description: The test script for OS Version greater than 8.0
  8. #Copyright (C): 2020 All rights reserved
  9. #********************************************************************
  10. # Defined Variable
  11. MYSQL_VER="8.4.5"
  12. MYSQL_FILE="mysql-${MYSQL_VER}-linux-glibc2.28-x86_64.tar.xz"
  13. MYSQL_URL="https://cdn.mysql.com/archives/mysql-8.4/"
  14. SRC_DIR=/tools
  15. MYSQL_BASE_DIR="/app"
  16. MYSQL_INSTALL_DIR="${MYSQL_BASE_DIR}/mysql"
  17. MYSQL_DATA_DIR="/data/3306"
  18. MYSQL_BINLOG_DIR="/data/binlog"
  19. MYSQL_LOG_DIR="/data/log"
  20. MYSQL_CONFILE="/etc/my.cnf"
  21. MYSQL_COMMAND_FILE="/etc/profile.d/mysqld.sh"
  22. USER="mysql"
  23. GROUP="mysql"
  24. MYSQL_PORT=3306
  25. SERVERID=$(hostname -I | awk -F'.' '{print $4}' | cut -d' ' -f1)
  26. . /etc/os-release
  27. color() {
  28. local text="$1"
  29. local status="$2"
  30. local RES_COL=60
  31. local GREEN="\033[1;32m"
  32. local RED="\033[1;31m"
  33. local YELLOW="\033[1;33m"
  34. local NORMAL="\033[0m"
  35. # 左侧文本 + 对齐
  36. printf "%-${RES_COL}s" "$text"
  37. # 移动光标到第 RES_COL 列
  38. echo -en "\033[${RES_COL}G"
  39. echo -n "["
  40. case "$status" in
  41. success|0)
  42. echo -en "${GREEN} OK ${NORMAL}"
  43. ;;
  44. failure|1)
  45. echo -en "${RED}FAILED${NORMAL}"
  46. ;;
  47. *)
  48. echo -en "${YELLOW}WARNING${NORMAL}"
  49. ;;
  50. esac
  51. echo "]"
  52. }
  53. check () {
  54. [ -e ${MYSQL_INSTALL_DIR} ] && { color "MYSQL SERVER 已安装,请卸载后再安装" 1; exit; }
  55. [ ! -d ${MYSQL_BASE_DIR} ] && mkdir -p ${MYSQL_BASE_DIR}
  56. [ ! -d ${MYSQL_DATA_DIR} ] && mkdir -p ${MYSQL_DATA_DIR}
  57. [ ! -d ${MYSQL_BINLOG_DIR} ] && mkdir -p ${MYSQL_BINLOG_DIR}
  58. [ ! -d ${MYSQL_LOG_DIR} ] && mkdir -p ${MYSQL_LOG_DIR}
  59. color "检查操作系统和系统版本" 0
  60. # Detect OS
  61. # $os_version variables aren't always in use, but are kept here for convenience
  62. if grep -qs "ubuntu" /etc/os-release; then
  63. os="ubuntu"
  64. os_version=$(grep 'VERSION_ID' /etc/os-release | cut -d '"' -f 2 | tr -d '.')
  65. elif [[ -e /etc/debian_version ]]; then
  66. os="debian"
  67. os_version=$(grep -oE '[0-9]+' /etc/debian_version | head -1)
  68. elif egrep -i "openeuler|rocky|almalinux|Anolis|centos|kylin" /etc/os-release &> /dev/null; then
  69. os="centos"
  70. os_version=$(grep "VERSION_ID" /etc/os-release | awk -F'"' '{print $2}' | cut -d'.' -f1)
  71. elif [[ -e /etc/fedora-release ]]; then
  72. os="fedora"
  73. os_version=$(grep -oE '[0-9]+' /etc/fedora-release | head -1)
  74. else
  75. color "This installer seems to be running on an unsupported distribution.Supported distros are Ubuntu, Debian, AlmaLinux, Rocky Linux, CentOS and Fedora." 1
  76. exit
  77. fi
  78. if [[ "$os" == "ubuntu" && "$os_version" -lt 2204 ]]; then
  79. color "Ubuntu 22.04 or higher is required to use this installer.This version of Ubuntu is too old and unsupported." 1
  80. exit
  81. fi
  82. if [[ "$os" == "debian" ]]; then
  83. if grep -q '/sid' /etc/debian_version; then
  84. color "Debian Testing and Debian Unstable are unsupported by this installer." 1
  85. exit
  86. fi
  87. if [[ "$os_version" -lt 11 ]]; then
  88. color "Debian 11 or higher is required to use this installer.This version of Debian is too old and unsupported." 1
  89. exit
  90. fi
  91. fi
  92. if [[ "$os" == "centos" && "$os_version" -lt 9 ]]; then
  93. os_name=$(grep "^NAME" /etc/os-release | awk -F'"' '{print $2}')
  94. echo "$os_name 9 or higher is required to use this installer.This version of $os_name is too old and unsupported." 0
  95. exit
  96. fi
  97. color "安装工具包,检查防火墙" 0
  98. if ! hash ufw 2>/dev/null && ! hash firewall-cmd 2>/dev/null && ! hash iptables 2>/dev/null; then
  99. if [[ "$os" == "ubuntu" && "$os" == "debinn" ]]; then
  100. apt -y update && apt install -y ufw
  101. [ $? -ne 0 ] && { color "Install UFW Failed" 1 ; exit; }
  102. ufw disable
  103. color 'ufw is closed' 0
  104. else
  105. dnf install -y firewalld
  106. [ $? -ne 0 ] && { color "Install Firewalld Failed" 1; exit; }
  107. setenforce 0
  108. sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
  109. color 'Selinux has been disabled, and Permanent After Restarting' 0
  110. systemctl disable --now firewalld.service &>/dev/null
  111. color 'firewalld is complete closed' 0
  112. fi
  113. fi
  114. if [[ "$os" == "ubuntu" && "$os" == "debinn" ]]; then
  115. apt -y update && apt install -y tar wget vim bash-completion gcc make openssl libssl-dev openssl-dev libaio-dev numactl
  116. [ $? -ne 0 ] && { color "Install Tools Failed" 1 ; exit; }
  117. else
  118. dnf install -y wget tar vim-enhanced bash-completion gcc make openssl-devel libaio-devel numactl
  119. [ $? -ne 0 ] && { color "Install Tools Failed" 1; exit; }
  120. fi
  121. [ ! -d ${SRC_DIR} ] && mkdir ${SRC_DIR}
  122. cd ${SRC_DIR}
  123. if [ -e ${SRC_DIR}/${MYSQL_FILE} ];then
  124. color "相关文件已准备好" 0
  125. else
  126. color '开始下载 MYSQL 源码包' 0
  127. wget ${MYSQL_URL}${MYSQL_FILE}
  128. [ $? -ne 0 ] && { color "下载 ${MYSQL_FILE}文件失败" 1; exit; }
  129. fi
  130. }
  131. install () {
  132. if id $USER &> /dev/null;then
  133. color "$USER 用户已存在" 1
  134. else
  135. groupadd $GROUP
  136. useradd -r -g $GROUP -s /sbin/nologin $USER
  137. color "创建 $USER 用户" 0
  138. fi
  139. chown -R $USER:$GROUP ${MYSQL_DATA_DIR} ${MYSQL_LOG_DIR} ${MYSQL_BINLOG_DIR}
  140. echo
  141. color "开始安装 MYSQL ===>>>"
  142. cd $SRC_DIR
  143. tar -xvf ${MYSQL_FILE} -C ${MYSQL_BASE_DIR}
  144. MYSQL_DIR=$(echo ${MYSQL_FILE} | sed -nr 's/^(.*[0-9]).*/\1/p')
  145. #cd ${MYSQL_BASE_DIR}
  146. #ln -s $(echo ${MYSQL_FILE} | sed -nr 's/^(.*[0-9]).*/\1/p') ${MYSQL_INSTALL_DIR}
  147. ln -s ${MYSQL_BASE_DIR}/${MYSQL_DIR} ${MYSQL_INSTALL_DIR}
  148. # initialized databases
  149. ${MYSQL_INSTALL_DIR}/bin/mysqld --initialize-insecure --lower_case_table_names=1 --user=$USER --basedir=${MYSQL_INSTALL_DIR} --datadir=${MYSQL_DATA_DIR}
  150. [ $? -eq 0 ] && color "MYSQL 初始化安装成功" 0 || { color "MYSQL 安装失败,退出!" 1 ;exit; }
  151. # chown BaseDir and DataDir
  152. chown -R $USER:$GROUP ${MYSQL_DATA_DIR} ${MYSQL_LOG_DIR} ${MYSQL_BINLOG_DIR}
  153. chown -R $USER:root ${MYSQL_BASE_DIR}/${MYSQL_DIR}*
  154. # configuration environment variable
  155. echo "export PATH=${MYSQL_INSTALL_DIR}/bin:\$PATH" > ${MYSQL_COMMAND_FILE}
  156. cat > ${MYSQL_CONFILE} <<EOF
  157. [mysql]
  158. socket = /tmp/mysql.sock
  159. default-character-set=utf8mb4
  160. [mysqld]
  161. user = $USER
  162. basedir = ${MYSQL_INSTALL_DIR}
  163. datadir = ${MYSQL_DATA_DIR}
  164. server_id = $SERVERID
  165. port = ${MYSQL_PORT}
  166. socket = /tmp/mysql.sock
  167. # 忽略大小写,加在在5.6/5.7低版本的mysql配置文件中有效. 8版本只能在初始化时指定,然后必须配置服务才能启动
  168. lower_case_table_names = 1
  169. innodb_open_files = 1000
  170. #skip-log-bin = 1
  171. log-bin = ${MYSQL_BINLOG_DIR}/mysql-bin
  172. log-error = ${MYSQL_LOG_DIR}/error.log
  173. binlog_expire_logs_seconds = 604800
  174. max_binlog_size = 100M
  175. character-set-server = utf8mb4
  176. innodb_file_per_table = 1
  177. skip-name-resolve = 1
  178. innodb_strict_mode = 0
  179. #skip-grant-tables = 1
  180. max_allowed_packet = 1024M
  181. max_connections = 1000
  182. EOF
  183. if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
  184. cat <<-EOF >> /etc/security/limits.conf
  185. * soft nofile 65535
  186. * hard nofile 65535
  187. EOF
  188. fi
  189. cat > /usr/lib/systemd/system/mysqld.service <<EOF
  190. [Unit]
  191. Description=MySQL Server
  192. Documentation=man:mysqld(8)
  193. Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
  194. After=network.target
  195. After=syslog.target
  196. [Service]
  197. User=$USER
  198. Group=$GROUP
  199. ExecStart=${MYSQL_INSTALL_DIR}/bin/mysqld --defaults-file=${MYSQL_CONFILE}
  200. LimitNOFILE = 5000
  201. [Install]
  202. WantedBy=multi-user.target
  203. EOF
  204. # start mysql serivce
  205. systemctl daemon-reload && systemctl enable --now mysqld.service
  206. sleep 10s
  207. systemctl is-active mysqld &> /dev/null && color "MYSQL 服务启动成功!" 0 || { color "MYSQL 服务启动失败,退出!" 1 ; exit; }
  208. color "MYSQL 安装完成" 0
  209. echo
  210. echo "请先运行: source ${MYSQL_COMMAND_FILE}"
  211. echo
  212. }
  213. check
  214. installl

执行脚本

  1. bash mysql_install_v8.sh

通过执行脚本实现一键安装 ~~

转载请注明作者和出处,并添加本页链接。
原文链接: //www.wwtou.com/vGSSNZyy.html