环境: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/mysqlelse echo "MySQL安装包已存在,跳过解压。" fi if ! id -u mysql > /dev/null 2 >&1 ; then echo "正在创建MySQL用户和组..." groupadd mysqluseradd -r -g mysql -s /bin/false mysqlelse echo "MySQL用户已存在,跳过创建。" fi if [ ! -f /etc/mysql/my.cnf ] ; then echo "正在创建MySQL配置文件..." mkdir -p /etc/mysqlcat > /etc/mysql/my.cnf << EOF[client]socket=/var/lib/mysql/mysql.sock[mysql]prompt=(\\ u@\\ h) [\\ d]>\\ _ # 更改MySQL客户端命令>前面显示内容[mysqld]port=3306user=mysqlsocket=/var/lib/mysql/mysql.sockdatadir=/usr/local/mysql/datalog_error=error.logEOF else echo "MySQL配置文件已存在,跳过创建。" fi if [ ! -d /usr/local/mysql/data ] ; then echo "正在初始化MySQL数据库..." cd /usr/local/mysqlmkdir -p mysql-fileschown mysql:mysql mysql-fileschmod 750 mysql-filesbin/mysqld --initialize --user = mysqlecho "等待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 ServerAfter=network.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnfExecStop=/usr/local/mysql/bin/mysqladmin shutdownRestart=on-failure[Install]WantedBy=multi-user.targetEOF else echo "systemd服务文件已存在,跳过创建。" fi if [ ! -d /var/lib/mysql/ ] ; then mkdir /var/lib/mysql/chown -R mysql:mysql /var/lib/mysqlchmod 750 /var/lib/mysqlelse echo "/var/lib/mysql目录已存在,跳过创建。" fi systemctl daemon-reloadsystemctl start mysqldsystemctl enable mysqldif ! grep -q '/usr/local/mysql/bin' /etc/profile; then echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profileexport PATH = $PATH :/usr/local/mysql/binecho "环境变量已添加到 /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