场景:为了在无网、外网 mysql 安装方便,这里分享一个自己编写得 shell脚本
- 这里以当前最新版
mysql 8.2.0;centos-7
二进制包下载:
下载地址
mysql_install.sh
#!/bin/bash
MYSQL_PORT=${1:-3306} # 默认端口3306
MYSQL_ROOT_PASSWORD=${2:-"SQLplus730.."} # 默认root密码
ALLOWED_HOST=${3:-"%"} # root用户可访问ip端 % 为远程所有ip连接; 192.168.1.%- 为允许192.168.1.*网段
# 解压安装包
tar -xf mysql-8.2.0-linux-glibc2.17-x86_64.tar.xz
# 移动解压后的文件夹到指定位置
mv mysql-8.2.0-linux-glibc2.17-x86_64 /usr/local/mysql
# 创建MySQL数据目录
mkdir -p /var/lib/mysql
# 创建MySQL组和用户
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 修改文件夹权限
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /var/lib/mysql
# 创建MySQL配置文件
cat > /usr/local/mysql/my.cnf << EOF
[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql
server_id=1
port=$MYSQL_PORT
socket=/var/lib/mysql/mysql.sock
[mysql]
default-character-set=utf8mb4
socket=/tmp/mysql.sock
[client]
port=$MYSQL_PORT
socket=/var/lib/mysql/mysql.sock
EOF
# 初始化MySQL
cd /usr/local/mysql
./bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize-insecure --user=mysql
# 创建MySQL服务
cat > /etc/systemd/system/mysql.service <<EOF
[Unit]
Description=MySQL 8.2.0 Server
After=syslog.target network.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=simple
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf
LimitNOFILE=5000
Restart=on-failure
RestartSec=5s
PrivateTmp=true
EOF
# 启动MySQL服务并设置开机启动
systemctl daemon-reload
systemctl start mysql
systemctl enable mysql
# 定义源文件和链接路径
SOCKET_SRC="/var/lib/mysql/mysql.sock"
SOCKET_LINK="/tmp/mysql.sock"
MAX_WAIT=60 # 最大等待秒数
# 检查MySQL服务状态
check_mysql_service() {
if ! systemctl is-active --quiet mysql; then
echo "MySQL服务未运行,尝试启动..."
systemctl start mysql || { echo "启动MySQL服务失败"; exit 1; }
fi
local waited=0
while [ ! -S "$SOCKET_SRC" ] && [ $waited -lt $MAX_WAIT ]; do
sleep 1
((waited++))
echo "等待socket文件生成($waited/$MAX_WAIT)..."
done
[ -S "$SOCKET_SRC" ] || { echo "超时:未检测到socket文件"; exit 1; }
}
# 主流程
check_mysql_service
if [ ! -L "$SOCKET_LINK" ] || [ ! -e "$SOCKET_LINK" ]; then
echo "正在创建软连接 $SOCKET_LINK -> $SOCKET_SRC"
ln -sf "$SOCKET_SRC" "$SOCKET_LINK"
chown mysql:mysql "$SOCKET_LINK" 2>/dev/null
echo "软连接创建成功"
else
echo "软连接已存在且有效:$(ls -l $SOCKET_LINK)"
fi
#设置软连接
sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
echo "开始设置root用户"
# 设置root密码和远程访问
/usr/local/mysql/bin/mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';"
/usr/local/mysql/bin/mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "update mysql.user set host='$ALLOWED_HOST' where user='root';"
/usr/local/mysql/bin/mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "FLUSH PRIVILEGES;"
echo "设置成功"

- 环境变量配置:
mysql_remove.sh
#!/bin/bash
#!/bin/bash
# 停止mysql服务
sudo systemctl stop mysql
# 删除mysql用户组
sudo userdel mysql
sudo groupdel mysql
# 删除mysql服务配置
sudo systemctl disable mysql
sudo rm /etc/systemd/system/mysql.service
# 删除数据文件
sudo rm -rf /var/lib/mysql
# 删除mysql二进制文件
sudo rm -rf /usr/local/mysql
# 删除软连接
sudo rm -rf /tmp/mysql.sock
sudo rm -rf /usr/local/bin/mysql
echo "mysql已成功卸载!"
本文介绍了如何编写shell脚本在无网络连接情况下安装MySQL8.2.0,包括下载二进制包、配置环境、初始化数据库、创建服务以及提供了一个用于卸载MySQL的shell脚本。

666






