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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.