mysql脚本安装

发布于:2025-06-07 ⋅ 阅读:(21) ⋅ 点赞:(0)

install_mysql57.sh

#!/bin/bash

# 检查是否以 root 权限运行
if [ "$EUID" -ne 0 ]; then
  echo "请以 root 权限运行此脚本。"
  exit 1
fi

# 设置工作目录和 MySQL 下载信息
WORK_DIR="/opt/mysql_install"
MYSQL_TAR="mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar"
MYSQL_URL="https://downloads.mysql.com/archives/get/p/23/file/$MYSQL_TAR"

# 创建工作目录
mkdir -p $WORK_DIR
cd $WORK_DIR || exit

# 检查 tar 文件是否存在,不存在则下载
if [ ! -f "$WORK_DIR/$MYSQL_TAR" ]; then
  echo "📥 正在下载 MySQL RPM 包..."
  wget -O $WORK_DIR/$MYSQL_TAR $MYSQL_URL

  if [ $? -ne 0 ]; then
    echo "❌ 下载失败,请检查网络连接或 URL 是否有效。"
    exit 1
  fi
else
  echo "✅ 已找到 $MYSQL_TAR,跳过下载步骤。"
fi

echo "📦 正在解压 tar 文件..."
tar -xvf $MYSQL_TAR

# 导入 MySQL GPG 密钥
echo "🔑 正在导入 MySQL GPG 密钥..."
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

# 卸载 mariadb-libs
echo "🔧 检查并卸载 mariadb-libs..."
if rpm -qa | grep -qw mariadb-libs; then
  echo "发现 mariadb-libs,正在卸载..."
  yum remove -y mariadb-libs
else
  echo "未发现 mariadb-libs,跳过卸载步骤。"
fi

# 安装依赖项
echo "🔧 安装依赖:libaio、perl、net-tools、perl-Data-Dumper、perl-JSON ..."
yum install -y libaio perl net-tools perl-Data-Dumper perl-JSON

# 安装 MySQL 基础包
echo "💾 正在安装 MySQL 5.7 的基础 RPM 包..."
for pkg in mysql-community-common mysql-community-libs mysql-community-client mysql-community-server; do
  rpm_file=$(ls ${pkg}-*.rpm)
  echo "正在安装 $rpm_file ..."
  rpm -ivh $rpm_file
done

# 初始化数据库
echo "🧠 初始化 MySQL 数据库..."
mysqld --initialize --user=mysql


# 获取临时密码(可选)
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
if [ -n "$TEMP_PASS" ]; then
  echo "🔑 MySQL 初始临时密码为:$TEMP_PASS"
else
  echo "警告: 未找到初始临时密码,请确认是否已正确初始化数据库或手动设置root密码。"
fi

# 启动 MySQL 服务
echo "⚙️ 启动 MySQL 服务..."
systemctl enable mysqld
systemctl start mysqld

# 检查状态
systemctl status mysqld


# 设置新密码为固定值
NEW_PASS="123456"

# 自动登录 MySQL 并修改 root 密码及授权 root@%
if [ -n "$TEMP_PASS" ]; then
  echo "🔑 正在修改 MySQL root 用户的密码为 $NEW_PASS 并授权 root@% ..."
  
  # 使用多行SQL命令进行密码修改和权限授权
  mysql --connect-expired-password -u root -p"$TEMP_PASS" << EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '$NEW_PASS';
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY '$NEW_PASS';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

  if [ $? -eq 0 ]; then
    echo "✅ 成功修改 MySQL root 用户的密码并授权 root@%。"
  else
    echo "❌ 修改 MySQL root 用户的密码或授权失败。请检查 MySQL 日志获取更多信息。"
    exit 1
  fi
else
  echo "由于没有获取到临时密码,无法自动修改 MySQL root 用户的密码或授权,请手动进行修改和授权。"
fi


# 开启3306端口
echo "🔒 正在开启防火墙中的3306端口..."
if systemctl is-active --quiet firewalld; then
  firewall-cmd --zone=public --add-port=3306/tcp --permanent
  firewall-cmd --reload
  echo "✅ 防火墙中的3306端口已开启。"
else
  echo "警告: firewalld 服务未运行,无法自动开启3306端口。请手动配置防火墙。"
fi


echo "✅ MySQL 5.7 安装完成!"
echo "你可以使用以下命令从其他主机登录 MySQL:"
echo "mysql -h your_server_ip -u root -p"



install_mysql8.sh

#!/bin/bash

# 检查是否以 root 权限运行
if [ "$EUID" -ne 0 ]; then
  echo "请以 root 权限运行此脚本。"
  exit 1
fi

# 设置工作目录和 MySQL 下载信息
WORK_DIR="/opt/mysql_install"
MYSQL_TAR="mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar"
MYSQL_URL="https://downloads.mysql.com/archives/get/p/23/file/$MYSQL_TAR"

# 创建工作目录
mkdir -p $WORK_DIR
cd $WORK_DIR || exit

# 检查 tar 文件是否存在,不存在则下载
if [ ! -f "$WORK_DIR/$MYSQL_TAR" ]; then
  echo "📥 正在下载 MySQL RPM 包..."
  wget -O $WORK_DIR/$MYSQL_TAR $MYSQL_URL

  if [ $? -ne 0 ]; then
    echo "❌ 下载失败,请检查网络连接或 URL 是否有效。"
    exit 1
  fi
else
  echo "✅ 已找到 $MYSQL_TAR,跳过下载步骤。"
fi

echo "📦 正在解压 tar 文件..."
tar -xvf $MYSQL_TAR

# 导入 MySQL GPG 密钥
echo "🔑 正在导入 MySQL GPG 密钥..."
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

# 卸载 mariadb-libs
echo "🔧 检查并卸载 mariadb-libs..."
if rpm -qa | grep -qw mariadb-libs; then
  echo "发现 mariadb-libs,正在卸载..."
  yum remove -y mariadb-libs
else
  echo "未发现 mariadb-libs,跳过卸载步骤。"
fi

# 安装依赖项
echo "🔧 安装依赖:libaio、perl、net-tools、perl-Data-Dumper、perl-JSON ..."
yum install -y libaio perl net-tools perl-Data-Dumper perl-JSON

# 按照正确顺序安装 MySQL RPM 包
echo "💾 正在按顺序安装 MySQL RPM 包..."

RPM_LIST=(
  mysql-community-common-*.rpm
  mysql-community-libs-*.rpm
  mysql-community-libs-compat-*.rpm
  mysql-community-client-plugins-*.rpm
  mysql-community-client-*.rpm
  mysql-community-icu-data-files-*.rpm
  mysql-community-server-*.rpm
)

for rpm_file in "${RPM_LIST[@]}"; do
  if [ -f "$rpm_file" ]; then
    echo "📦 正在安装 $rpm_file ..."
    rpm -Uvh "$rpm_file"
  else
    echo "❌ 找不到文件: $rpm_file,安装中断!"
    exit 1
  fi
done

# 初始化数据库
echo "🧠 初始化 MySQL 数据库..."
mysqld --initialize --user=mysql

# 获取临时密码
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
if [ -n "$TEMP_PASS" ]; then
  echo "🔑 MySQL 初始临时密码为:$TEMP_PASS"
else
  echo "⚠️ 未找到初始临时密码,请手动设置 root 密码。"
fi

# 启动 MySQL 服务
echo "⚙️ 启动 MySQL 服务..."
systemctl enable mysqld
systemctl start mysqld

# 设置新密码为固定值
NEW_PASS="123456"

# 自动登录 MySQL 修改密码及授权
if [ -n "$TEMP_PASS" ]; then
  echo "🔑 正在修改 root 用户密码并授权 root@% ..."

  mysql --connect-expired-password -u root -p"$TEMP_PASS" << EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '$NEW_PASS';
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY '$NEW_PASS';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

  if [ $? -eq 0 ]; then
    echo "✅ 成功修改 root 用户密码并授权 root@%。"
  else
    echo "❌ 修改密码或授权失败,请手动处理。"
  fi
fi

# 开启防火墙中的3306端口
echo "🔒 正在开启防火墙中的3306端口..."
if systemctl is-active --quiet firewalld; then
  firewall-cmd --zone=public --add-port=3306/tcp --permanent
  firewall-cmd --reload
  echo "✅ 防火墙中的3306端口已开启。"
else
  echo "⚠️ firewalld 未运行,需手动配置防火墙。"
fi

echo "🎉 MySQL 8.0 安装完成!"
echo "你可以通过以下命令远程登录:"
echo "   mysql -h your_server_ip -u root -p"