install_mysql57.sh
#!/bin/bash
if [ "$EUID" -ne 0 ]; thenecho "请以 root 权限运行此脚本。"exit 1
fi
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
if [ ! -f "$WORK_DIR/$MYSQL_TAR" ]; thenecho "📥 正在下载 MySQL RPM 包..."wget -O $WORK_DIR/$MYSQL_TAR $MYSQL_URLif [ $? -ne 0 ]; thenecho "❌ 下载失败,请检查网络连接或 URL 是否有效。"exit 1fi
elseecho "✅ 已找到 $MYSQL_TAR,跳过下载步骤。"
fiecho "📦 正在解压 tar 文件..."
tar -xvf $MYSQL_TAR
echo "🔑 正在导入 MySQL GPG 密钥..."
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
echo "🔧 检查并卸载 mariadb-libs..."
if rpm -qa | grep -qw mariadb-libs; thenecho "发现 mariadb-libs,正在卸载..."yum remove -y mariadb-libs
elseecho "未发现 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
echo "💾 正在安装 MySQL 5.7 的基础 RPM 包..."
for pkg in mysql-community-common mysql-community-libs mysql-community-client mysql-community-server; dorpm_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" ]; thenecho "🔑 MySQL 初始临时密码为:$TEMP_PASS"
elseecho "警告: 未找到初始临时密码,请确认是否已正确初始化数据库或手动设置root密码。"
fi
echo "⚙️ 启动 MySQL 服务..."
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
NEW_PASS="123456"
if [ -n "$TEMP_PASS" ]; thenecho "🔑 正在修改 MySQL root 用户的密码为 $NEW_PASS 并授权 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;
EOFif [ $? -eq 0 ]; thenecho "✅ 成功修改 MySQL root 用户的密码并授权 root@%。"elseecho "❌ 修改 MySQL root 用户的密码或授权失败。请检查 MySQL 日志获取更多信息。"exit 1fi
elseecho "由于没有获取到临时密码,无法自动修改 MySQL root 用户的密码或授权,请手动进行修改和授权。"
fi
echo "🔒 正在开启防火墙中的3306端口..."
if systemctl is-active --quiet firewalld; thenfirewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reloadecho "✅ 防火墙中的3306端口已开启。"
elseecho "警告: firewalld 服务未运行,无法自动开启3306端口。请手动配置防火墙。"
fiecho "✅ MySQL 5.7 安装完成!"
echo "你可以使用以下命令从其他主机登录 MySQL:"
echo "mysql -h your_server_ip -u root -p"
install_mysql8.sh
#!/bin/bash
if [ "$EUID" -ne 0 ]; thenecho "请以 root 权限运行此脚本。"exit 1
fi
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
if [ ! -f "$WORK_DIR/$MYSQL_TAR" ]; thenecho "📥 正在下载 MySQL RPM 包..."wget -O $WORK_DIR/$MYSQL_TAR $MYSQL_URLif [ $? -ne 0 ]; thenecho "❌ 下载失败,请检查网络连接或 URL 是否有效。"exit 1fi
elseecho "✅ 已找到 $MYSQL_TAR,跳过下载步骤。"
fiecho "📦 正在解压 tar 文件..."
tar -xvf $MYSQL_TAR
echo "🔑 正在导入 MySQL GPG 密钥..."
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
echo "🔧 检查并卸载 mariadb-libs..."
if rpm -qa | grep -qw mariadb-libs; thenecho "发现 mariadb-libs,正在卸载..."yum remove -y mariadb-libs
elseecho "未发现 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
echo "💾 正在按顺序安装 MySQL RPM 包..."RPM_LIST=(mysql-community-common-*.rpmmysql-community-libs-*.rpmmysql-community-libs-compat-*.rpmmysql-community-client-plugins-*.rpmmysql-community-client-*.rpmmysql-community-icu-data-files-*.rpmmysql-community-server-*.rpm
)for rpm_file in "${RPM_LIST[@]}"; doif [ -f "$rpm_file" ]; thenecho "📦 正在安装 $rpm_file ..."rpm -Uvh "$rpm_file"elseecho "❌ 找不到文件: $rpm_file,安装中断!"exit 1fi
done
echo "🧠 初始化 MySQL 数据库..."
mysqld --initialize --user=mysql
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
if [ -n "$TEMP_PASS" ]; thenecho "🔑 MySQL 初始临时密码为:$TEMP_PASS"
elseecho "⚠️ 未找到初始临时密码,请手动设置 root 密码。"
fi
echo "⚙️ 启动 MySQL 服务..."
systemctl enable mysqld
systemctl start mysqld
NEW_PASS="123456"
if [ -n "$TEMP_PASS" ]; thenecho "🔑 正在修改 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;
EOFif [ $? -eq 0 ]; thenecho "✅ 成功修改 root 用户密码并授权 root@%。"elseecho "❌ 修改密码或授权失败,请手动处理。"fi
fi
echo "🔒 正在开启防火墙中的3306端口..."
if systemctl is-active --quiet firewalld; thenfirewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reloadecho "✅ 防火墙中的3306端口已开启。"
elseecho "⚠️ firewalld 未运行,需手动配置防火墙。"
fiecho "🎉 MySQL 8.0 安装完成!"
echo "你可以通过以下命令远程登录:"
echo " mysql -h your_server_ip -u root -p"