#!/bin/bash
# 声明脚本解释器为bash,固定脚本开头,确保在bash环境下执行
# ====================== 1. 安装基础依赖工具 ======================
# 安装tar解压工具,-y表示所有交互提示都自动确认yes,无需手动回车
yum install tar -y
# ====================== 2. 解压MySQL安装包并做目录规划 =====================
# 解压MySQL二进制包:需确保包和脚本在同一目录
tar xzvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
# 创建应用统一安装目录,运维规范:将所有服务安装到/application目录,方便管理
mkdir /application
# 将解压后的MySQL目录移动到/application,并指定版本号命名,便于多版本管理
mv mysql-5.6.40-linux-glibc2.12-x86_64 /application/mysql-5.6.40
# 创建软链接:将带版本的目录链接为/application/mysql,后续操作直接用该软链接,版本升级时仅需修改软链接
ln -s /application/mysql-5.6.40/ /application/mysql
# ====================== 3. 复制MySQL默认配置文件和启动脚本 ======================
# 进入MySQL的辅助配置文件目录,该目录包含默认配置、启动脚本等
cd /application/mysql/support-files/
# 复制MySQL默认配置文件到系统全局配置路径,/etc/my.cnf是MySQL的核心配置文件(优先加载)
cp my-default.cnf /etc/my.cnf
# 创建系统启动脚本目录(防止部分最小化系统无此目录,实际主流系统默认存在/etc/init.d/)
mkdir /etc/init.d/
# 复制MySQL的SysV风格启动脚本到系统启动目录,命名为mysqld
cp mysql.server /etc/init.d/mysqld
# ====================== 4. 创建MySQL专用运行用户 + 安装初始化依赖 ===========
# 进入MySQL的初始化脚本目录,该目录包含mysql_install_db数据库初始化脚本
cd /application/mysql/scripts/
# 创建mysql专用系统用户:-s /sbin/nologin 禁止用户登录系统 -M 不创建用户家目录(服务用户无需登录/家目录)
useradd mysql -s /sbin/nologin -M
# 安装autoconf:mysql_install_db初始化脚本的依赖工具,缺失会导致初始化失败
yum install -y autoconf
# 安装perl-core:Perl核心库,MySQL 5.6初始化/部分工具依赖Perl
yum install -y perl-core
# ====================== 5. 初始化MySQL数据库(核心步骤)====================
# 执行数据库初始化脚本,初始化数据目录、系统库(mysql/information_schema等)
# --user=mysql:指定MySQL服务的运行用户(必须为上面创建的专用用户)
# --basedir=/application/mysql:指定MySQL的安装根目录
# --datadir=/application/mysql/data:指定MySQL的数据存储目录(会自动创建)
./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data
# ====================== 6. 配置MySQL系统环境变量 ======================
# 将MySQL的bin目录加入系统PATH,让系统任意目录可执行mysql/mysqladmin等命令
# 写入/etc/profile.d/目录:该目录下的.sh文件会在用户登录时自动加载,比直接改/etc/profile更规范
echo 'export PATH="/application/mysql/bin:$PATH"' > /etc/profile.d/mysql.sh
# 立即加载环境变量配置,无需重新登录终端即可生效
source /etc/profile
# ====================== 7. 修正启动脚本中的默认路径 ======================
# sed批量替换:将启动脚本中默认的/usr/local/mysql(官方默认安装路径)改为实际的/application/mysql
# s#/usr/local#/application#g:#作为分隔符(避免路径/的转义问题),g表示全局替换
# 替换的文件:系统启动脚本mysqld + MySQL安全启动脚本mysqld_safe,确保启动时路径正确
sed -i 's#/usr/local#/application#g' /etc/init.d/mysqld /application/mysql/bin/mysqld_safe
# ====================== 8. 配置systemd服务管理===============
# 创建mysqld的systemd服务文件
cat > /usr/lib/systemd/system/mysqld.service << 'EOF'
[Unit]
Description=MySQL Server # 服务描述信息
Documentation=man:mysqld(8)# 服务手册路径
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html # 官方文档
After=network.target # 表示该服务在网络服务启动后再启动
After=syslog.target # 表示该服务在日志服务启动后再启动
[Install]
WantedBy=multi-user.target # 表示开机多用户模式下自动启动该服务
[Service]
User=mysql # 服务运行用户
Group=mysql # 服务运行用户组(未创建会自动使用用户名作为组名)
ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf # 服务启动命令,指定配置文件
LimitNOFILE = 5000 # 设置服务的最大文件句柄数,防止MySQL连接数过多导致句柄耗尽
server_id = 1 # MySQL主从复制的服务ID,单机可设1,主从环境需唯一
EOF
# ====================== 9. 配置MySQL核心配置文件/etc/my.cnf =================
# 覆盖/etc/my.cnf,配置MySQL最核心的两个路径
cat > /etc/my.cnf << 'EOF'
[mysqld]
basedir = /application/mysql/ # MySQL安装根目录
datadir = /application/mysql/data # MySQL数据存储目录
EOF
# ====================== 10. 启动MySQL服务 + 关闭防火墙/SELinux========
# systemd管理命令
systemctl enable --now mysqld
# 关闭firewalld防火墙,避免防火墙拦截3306端口
systemctl stop firewalld.service
# 临时关闭SELinux,避免SELinux阻止MySQL的文件/端口访问
setenforce 0
# ====================== 11. 初始化MySQL root密码 ======================
# mysqladmin是MySQL的管理工具
# password '123456':将root用户的密码设置为123456(单机测试可用,生产环境需用复杂密码)
mysqladmin -uroot password '123456'
# ====================== 12. 安装额外兼容依赖======================
# 安装epel源:Extra Packages for Enterprise Linux,提供官方源没有的软件包
dnf install -y epel-release
# 安装ncurses兼容库:MySQL 5.6在系统中运行会缺失该兼容库,导致启动失败
dnf install -y ncurses-compat-libs
版权属于:
无冕の神
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论 (0)