centos 7 MySQL 离线一键自动安装脚本

MySQL 一键自动安装脚本

1. 简介

该脚本是用于在离线环境下一键自动安装 MySQL 的 Bash 脚本。它包含了安装 MySQL 的所有步骤,包括安装依赖、创建用户和组、创建目录、安装 MySQL、配置 MySQL、创建服务以及初始化 MySQL。

2. 脚本功能

  • 安装所需的依赖包。
  • 创建 MySQL 用户和组。
  • 创建目录并设置权限。
  • 解压并安装 MySQL。
  • 设置 MySQL 的配置文件。
  • 创建 MySQL 服务并设置为开机自启。
  • 初始化 MySQL,并获取初始 Root 密码。
  • 等待 MySQL 服务启动,重置 Root 密码。
  • 创建新的 MySQL 用户并授予所有权限。
  • 在防火墙中添加 MySQL 端口。

2.1. 下载地址

见资源绑定

3. 使用说明

准备工作

  • 确保脚本运行在具有 root 权限的用户下。
  • 下载并准备好 MySQL 的安装包,并将其放置在指定的路径下。
  • 下载地址 MySQL: https://www.alipan.com/s/eYrkBrkVkrJ

执行脚本

  • 执行脚本:./mysql_install.sh

4. 注意事项

  • 在执行脚本之前,请确保已经准备好了 MySQL 的安装包,并放置在正确的路径下。
  • 确保脚本运行时具有足够的权限来执行系统级的操作。
  • 在脚本运行期间,请留意是否有任何错误信息输出,确保每个步骤都成功执行。

5. 代码解释

#!/bin/bash

set -e

MYSQL_PACKAGE="/usr/local/autoinstall/lib/mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz"
MYSQL_INSTALL_DIR="/usr/local/mysql"
MYSQL_DATA_DIR="/dhxdata/mysql"
MYSQL_SOCKET_DIR="/usr/local/mysql/socket"
MYSQL_SOCKET_FILE="$MYSQL_SOCKET_DIR/mysql13306.sock"
MYSQL_PASSWORD="tech@2023#YN"
MYSQL_NEW_USER="mysql_fu"
MYSQL_NEW_USER_PASSWORD="Fu@2023"
MySQL_PORT="13306"
DEPENDENCY_DIR="/usr/local/autoinstall/third-lib/"

install_dependencies() {
    echo "安装依赖..."
    yum localinstall -y "$DEPENDENCY_DIR/ncurses-devel"/*.rpm
    yum localinstall -y "$DEPENDENCY_DIR/libaio-devel"/*.rpm
}

setup_mysql_account() {
    echo "创建MySQL用户和组..."
    groupadd mysql
    useradd -r -g mysql -s /bin/false mysql
}

setup_directories() {
    echo "创建目录并设置权限..."
    mkdir -p "$MYSQL_INSTALL_DIR"
    mkdir -p "$MYSQL_DATA_DIR"
    mkdir -p "$MYSQL_SOCKET_DIR"
    chown -R mysql:mysql "$MYSQL_INSTALL_DIR"
    chown -R mysql:mysql "$MYSQL_DATA_DIR"
    chown -R mysql:mysql "$MYSQL_SOCKET_DIR"
}

install_mysql() {
    echo "解压并安装MySQL..."
    tar -xf "$MYSQL_PACKAGE" --strip-components=1 -C "$MYSQL_INSTALL_DIR"
}

configure_mysql() {
echo "将MySQL可执行文件添加到系统路径..."
echo "export PATH=\$PATH:$MYSQL_INSTALL_DIR/bin" >> /etc/profile
source /etc/profile

echo "设置MySQL配置文件"
cat << EOF > /etc/my.cnf
[mysqld]
user=mysql
basedir=$MYSQL_INSTALL_DIR
datadir=$MYSQL_DATA_DIR
socket=$MYSQL_SOCKET_FILE
port=$MySQL_PORT
sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
EOF
}

setup_service() {
echo "创建MySQL服务并设置为开机自启..."
cat << EOF > /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=$MYSQL_INSTALL_DIR/bin/mysqld --defaults-file=/etc/my.cnf
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
}

initialize_mysql() {
    echo "初始化MySQL,并获取初始Root密码..."
    $MYSQL_INSTALL_DIR/bin/mysqld --initialize --user=mysql --basedir=$MYSQL_INSTALL_DIR --datadir=$MYSQL_DATA_DIR > mysql_init.log 2>&1
}

main() {
if [[ $EUID -ne 0 ]]; then
   echo "该脚本必须以root身份运行" 
   exit 1
fi

if [ ! -f "$MYSQL_PACKAGE" ]; then
   echo "MySQL安装包不存在."
   exit 1
fi

install_dependencies
setup_mysql_account
setup_directories
install_mysql
configure_mysql
setup_service
initialize_mysql

TEMP_PASSWORD=$(awk '/temporary password/{print $NF}' mysql_init.log)

echo "MySQL临时Root密码: $TEMP_PASSWORD"

echo "等待MySQL服务启动..."
until mysqladmin ping --socket=$MYSQL_SOCKET_FILE --silent; do
	sleep 1
	echo "等待MySQL启动..."
done

echo "重置MySQL Root密码..."
mysql --user=root --password="$TEMP_PASSWORD" --connect-expired-password --socket=$MYSQL_SOCKET_FILE <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';
EOF

echo "创建新的MySQL用户并授予所有权限..."
mysql --user=root --password="$MYSQL_PASSWORD" --socket=$MYSQL_SOCKET_FILE <<EOF
CREATE USER '$MYSQL_NEW_USER'@'%' IDENTIFIED BY '$MYSQL_NEW_USER_PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_NEW_USER'@'%';
EOF
echo "MySQL已经安装并启动,端口为$MySQL_PORT!"

# 在防火墙中添加MySQL端口

firewall-cmd --zone=public --add-port=$MySQL_PORT/tcp --permanent
firewall-cmd --reload
}

main "$@"
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀鋒偏冷

支持一发成植,一步修复发际

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值