- 环境:centos7
- 版本:8.0.28
- 安装包:mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 二进制包
- 要求:安装包和shell脚本在同一目录下
- 执行方式:
sudo ./install_mysql8.sh
shell
#!/bin/bash
# 定义MySQL安装目录和压缩包名称
MYSQL_DIR="/usr/local/mysql-8.0.28-linux-glibc2.12-x86_64"
MYSQL_TAR="mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz"
# 检查MySQL目录是否存在,不存在则解压并创建符号链接
if [ ! -d "$MYSQL_DIR" ]; then
echo "正在解压MySQL安装包..."
tar -xvf "$MYSQL_TAR" -C /usr/local/
ln -s "$MYSQL_DIR" /usr/local/mysql
else
echo "MySQL安装包已存在,跳过解压。"
fi
# 检查MySQL用户是否存在,不存在则创建
if ! id -u mysql >/dev/null 2>&1; then
echo "正在创建MySQL用户和组..."
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
else
echo "MySQL用户已存在,跳过创建。"
fi
# 检查MySQL配置文件是否存在,不存在则创建
if [ ! -f /etc/mysql/my.cnf ]; then
echo "正在创建MySQL配置文件..."
mkdir -p /etc/mysql
cat > /etc/mysql/my.cnf <<EOF
[client]
socket=/var/lib/mysql/mysql.sock
[mysql]
prompt=(\\u@\\h) [\\d]>\\_ # 更改MySQL客户端命令>前面显示内容
[mysqld]
port=3306
user=mysql
socket=/var/lib/mysql/mysql.sock
datadir=/usr/local/mysql/data
log_error=error.log
EOF
else
echo "MySQL配置文件已存在,跳过创建。"
fi
# 检查MySQL数据目录是否存在,不存在则初始化数据库
if [ ! -d /usr/local/mysql/data ]; then
echo "正在初始化MySQL数据库..."
cd /usr/local/mysql
mkdir -p mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
bin/mysqld --initialize --user=mysql
# 获取临时root密码
echo "等待MySQL生成临时密码..."
for i in {1..30}; do
if [ -f /usr/local/mysql/data/error.log ]; then
temp_password=$(grep 'temporary password' /usr/local/mysql/data/error.log | awk '{print $NF}')
if [ -n "$temp_password" ]; then
echo "MySQL临时密码: $temp_password"
break
fi
fi
sleep 1
done
if [ -z "$temp_password" ]; then
echo "无法获取MySQL临时密码,请检查/usr/local/mysql/data/error.log"
exit 1
fi
else
echo "MySQL数据目录已存在,跳过初始化。"
fi
# 检查systemd服务文件是否存在,不存在则创建
if [ ! -f /etc/systemd/system/mysqld.service ]; then
echo "正在创建systemd服务文件..."
cat > /etc/systemd/system/mysqld.service <<EOF
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
else
echo "systemd服务文件已存在,跳过创建。"
fi
if [ ! -d /var/lib/mysql/ ]; then
mkdir /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
chmod 750 /var/lib/mysql
else
echo "/var/lib/mysql目录已存在,跳过创建。"
fi
# 启动并启用MySQL服务
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
# 配置环境变量
if ! grep -q '/usr/local/mysql/bin' /etc/profile; then
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
# 直接修改当前 Shell 的环境变量
export PATH=$PATH:/usr/local/mysql/bin
echo "环境变量已添加到 /etc/profile 并立即生效。"
echo "如需全局生效,请手动执行以下命令:"
echo "source /etc/profile"
else
echo "环境变量已配置,跳过。"
fi
# 检查MySQL是否安装成功
if mysql --version >/dev/null 2>&1; then
echo "MySQL 8 安装成功!"
else
echo "MySQL 安装失败,请检查日志。"
exit 1
fi