shell脚本主动安装MySQL8

[复制链接]
发表于 2025-11-2 14:31:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  • 环境:centos7
  • 版本:8.0.28
  • 安装包:mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz   二进制包
  • 要求:安装包和shell脚本在同一目次下
  • 实行方式:sudo ./install_mysql8.sh
  1. #!/bin/bash
  2. # 定义MySQL安装目录和压缩包名称
  3. MYSQL_DIR="/usr/local/mysql-8.0.28-linux-glibc2.12-x86_64"
  4. MYSQL_TAR="mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz"
  5.   
  6. # 检查MySQL目录是否存在,不存在则解压并创建符号链接
  7. if [ ! -d "$MYSQL_DIR" ]; then
  8.     echo "正在解压MySQL安装包..."
  9.     tar -xvf "$MYSQL_TAR" -C /usr/local/
  10.     ln -s "$MYSQL_DIR" /usr/local/mysql
  11. else
  12.     echo "MySQL安装包已存在,跳过解压。"
  13. fi
  14.   
  15. # 检查MySQL用户是否存在,不存在则创建
  16. if ! id -u mysql >/dev/null 2>&1; then
  17.     echo "正在创建MySQL用户和组..."
  18.     groupadd mysql
  19.     useradd -r -g mysql -s /bin/false mysql
  20. else
  21.     echo "MySQL用户已存在,跳过创建。"
  22. fi
  23.   
  24. # 检查MySQL配置文件是否存在,不存在则创建
  25. if [ ! -f /etc/mysql/my.cnf ]; then
  26.     echo "正在创建MySQL配置文件..."
  27.     mkdir -p /etc/mysql
  28.     cat > /etc/mysql/my.cnf <<EOF
  29. [client]
  30. socket=/var/lib/mysql/mysql.sock
  31.   
  32. [mysql]
  33. prompt=(\\u@\\h) [\\d]>\\_    # 更改MySQL客户端命令>前面显示内容
  34.   
  35. [mysqld]
  36. port=3306
  37. user=mysql
  38. socket=/var/lib/mysql/mysql.sock
  39. datadir=/usr/local/mysql/data
  40. log_error=error.log
  41. EOF
  42. else
  43.     echo "MySQL配置文件已存在,跳过创建。"
  44. fi
  45.   
  46. # 检查MySQL数据目录是否存在,不存在则初始化数据库
  47. if [ ! -d /usr/local/mysql/data ]; then
  48.     echo "正在初始化MySQL数据库..."
  49.     cd /usr/local/mysql
  50.     mkdir -p mysql-files
  51.     chown mysql:mysql mysql-files
  52.     chmod 750 mysql-files
  53.     bin/mysqld --initialize --user=mysql
  54.   
  55.     # 获取临时root密码
  56.     echo "等待MySQL生成临时密码..."
  57.     for i in {1..30}; do
  58.         if [ -f /usr/local/mysql/data/error.log ]; then
  59.             temp_password=$(grep 'temporary password' /usr/local/mysql/data/error.log | awk '{print $NF}')
  60.             if [ -n "$temp_password" ]; then
  61.                 echo "MySQL临时密码: $temp_password"
  62.                 break
  63.             fi
  64.         fi
  65.         sleep 1
  66.     done
  67.   
  68.     if [ -z "$temp_password" ]; then
  69.         echo "无法获取MySQL临时密码,请检查/usr/local/mysql/data/error.log"
  70.         exit 1
  71.     fi
  72. else
  73.     echo "MySQL数据目录已存在,跳过初始化。"
  74. fi
  75.   
  76. # 检查systemd服务文件是否存在,不存在则创建
  77. if [ ! -f /etc/systemd/system/mysqld.service ]; then
  78.     echo "正在创建systemd服务文件..."
  79.     cat > /etc/systemd/system/mysqld.service <<EOF
  80. [Unit]
  81. Description=MySQL Server
  82. After=network.target
  83.   
  84. [Service]
  85. User=mysql
  86. Group=mysql
  87. ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf
  88. ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
  89. Restart=on-failure
  90.   
  91. [Install]
  92. WantedBy=multi-user.target
  93. EOF
  94. else
  95.     echo "systemd服务文件已存在,跳过创建。"
  96. fi
  97.   
  98. if [ ! -d /var/lib/mysql/ ]; then
  99.     mkdir /var/lib/mysql/
  100.     chown -R mysql:mysql /var/lib/mysql
  101.     chmod 750 /var/lib/mysql
  102. else
  103.     echo "/var/lib/mysql目录已存在,跳过创建。"
  104. fi
  105.   
  106. # 启动并启用MySQL服务
  107. systemctl daemon-reload
  108. systemctl start mysqld
  109. systemctl enable mysqld
  110.   
  111. # 配置环境变量
  112. if ! grep -q '/usr/local/mysql/bin' /etc/profile; then
  113.     echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
  114.     # 直接修改当前 Shell 的环境变量
  115.     export PATH=$PATH:/usr/local/mysql/bin
  116.     echo "环境变量已添加到 /etc/profile 并立即生效。"
  117.     echo "如需全局生效,请手动执行以下命令:"
  118.     echo "source /etc/profile"
  119. else
  120.     echo "环境变量已配置,跳过。"
  121. fi
  122.   
  123. # 检查MySQL是否安装成功
  124. if mysql --version >/dev/null 2>&1; then
  125.     echo "MySQL 8 安装成功!"
  126. else
  127.     echo "MySQL 安装失败,请检查日志日志。"
  128.     exit 1
  129. fi
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表