环境:centos7 版本:8.0.28 安装包:mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 二进制包 要求:安装包和shell脚本在同一目录下 执行方式:sudo ./install_mysql8.sh
#!/bin/bash
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"
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
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
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
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
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
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
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
export PATH = $PATH :/usr/local/mysql/bin
echo "环境变量已添加到 /etc/profile 并立即生效。"
echo "如需全局生效,请手动执行以下命令:"
echo "source /etc/profile"
else
echo "环境变量已配置,跳过。"
fi
if mysql --version > /dev/null 2 >&1 ; then
echo "MySQL 8 安装成功!"
else
echo "MySQL 安装失败,请检查日志。"
exit 1
fi