bash mysql-install.sh


#!/bin/bash

# 设置 MySQL 版本和下载地址
MYSQL_VERSION="5.7.44"
MYSQL_PACKAGE="mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.gz"
DOWNLOAD_URL="https://dev.mysql.com/get/Downloads/MySQL-5.7/${MYSQL_PACKAGE}"

# 设置安装目录
INSTALL_DIR="/usr/local/mysql"


# 检查是否以root用户运行
if [ "$(id -u)" != "0" ]; then
    echo "请以root用户身份运行此脚本。"
    exit 1
fi



# 检查文件是否已存在于当前目录
if [ -f $MYSQL_PACKAGE ]; then
    echo "文件 ${MYSQL_PACKAGE} 已经存在,跳过下载。"
else
    # 如果文件不存在,则开始下载到当前目录
    wget -c "$DOWNLOAD_URL" || {
        echo "下载文件 ${MYSQL_PACKAGE} 失败,请检查网络或 URL 是否正确。"
        exit 1
    }
    echo "文件 ${MYSQL_PACKAGE} 下载成功。"
fi

# 判断是否存在 mysql 用户,若不存在则创建
if id mysql >/dev/null 2>&1; then
    echo "MySQL 用户已存在"
else
    groupadd mysql
    useradd -r -g mysql -s /bin/false mysql
    echo "创建 MySQL 用户成功"
fi

# 解压到指定目录
mkdir -p /var/lib/mysql/ /usr/local/mysql/logs
tar zxvf "${MYSQL_PACKAGE}" -C "${INSTALL_DIR}" --strip-components=1 || { echo "解压文件失败。"; exit 1; }

# 删除已下载的压缩包,节省空间(可选)
rm -f "$MYSQL_PACKAGE"

# 设置权限
chown -R mysql:mysql "${INSTALL_DIR}"


# 创建 MySQL 配置文件(示例配置,根据需求修改)
cat <<EOF > "${INSTALL_DIR}/my.cnf"
[mysqld]
server-id = 1
basedir=${INSTALL_DIR}
datadir=${INSTALL_DIR}/data
port=3306
socket=/var/lib/mysql/mysql.sock

max_connections = 1000

slow_query_log = 1
slow_query_log_file = /usr/local/mysql/logs/slow_queries.log
long_query_time = 0.6 # 这里设置慢查询的阈值,单位是秒

log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 2 # 超过 2 天的 binlog 删除
log_error = /usr/local/mysql/logs/error.log # 错误日志路径

[client]
socket=/var/lib/mysql/mysql.sock
EOF

# 添加 MySQL 服务到系统服务管理(这里以 Systemd 为例)
cat <<EOF > /etc/systemd/system/mysql.service
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=${INSTALL_DIR}/bin/mysqld_safe --defaults-file=${INSTALL_DIR}/my.cnf
PIDFile=${INSTALL_DIR}/data/mysql.pid

[Install]
WantedBy=multi-user.target
EOF

# 重载 Systemd 并启动 MySQL 服务
systemctl daemon-reload
systemctl start mysql
systemctl enable mysql


# 开始初始化 MySQL
"${INSTALL_DIR}/bin/mysqld" --initialize-insecure --user=mysql || { echo "初始化 MySQL 失败。"; exit 1; }

echo "MySQL ${MYSQL_VERSION} 已安装并启动。"

exit 0