三、一键部署MySQL8.0.23

通过shell脚本一键部署MySQL8.0.23

MySQL安装包下载地址:MySQL :: Download MySQL Community Server (Archived Versions)

#!/bin/bash

#File name: mysql_script.sh
#Author: Wu
#Creation date: February 28, 2024

#压缩包路径
MYSQL_INSTALL_DIR="/tmp/mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar"
#安装路径
mysql_install_path=/home/mysql
#mysql 数据目录
mysql_date=/home/mysql/data
#mysql用户组  用户
user=mysql
# 是否开始
function Start(){
    read -p "是否开始?(Y/N):" begin
    if [ "$begin" == 'Y' ] || [ "$begin" == 'y' ] ;then
        return 0  # 退出函数
    else
        exit 0  # 退出程序
    fi
}
function check_user(){
    curuser=$USER
    if [ $curuser != 'root' ];then
        echo "当前用户非root,请切换至root后再操作!" 
        exit 0
    else
        return 0
    fi
}
function check_mariadb(){
    mariadb_rpm_list='rpm -qa |grep mariadb'
    if [ -n "$mariadb_rpm_list" ];then
        echo "mariadb检查结果:系统已安装mariadb,需先卸载"
        read -p "是否卸载mariadb?(Y/N):" choose_Unmariadb
        if [ "$choose_Unmariadb" == 'Y' ] || [ "$choose_Unmariadb" == 'y' ] ;then
            echo "开始卸载mariadb..."
            rpm -qa |grep mariadb |xargs rpm -e --nodeps
            sleep 2
            echo "mariadb卸载完成!"
        else
            exit 0
        fi
    else
        echo "mariadb检查结果:系统未安装mariadb."
        return 0
    fi
}
function mysql_check(){
    mysql_rpm_list='rpm -qa |grep mysql'
    if [ -n "$mysql_rpm_list" ]; then
        echo "mysql检查结果:系统已安装mysql,需先卸载,已安装的MySQL如下:"
        rpm -qa | grep mysql | tee
        read -p "是否卸载已安装的MySQL?(Y/N):" choose_UnMySQL
        if [ "$choose_UnMySQL" == 'Y' ] || [ "$choose_UnMySQL" == 'y' ];then
            echo "开始卸载MySQL..."
            rpm -qa |grep mysql | xargs rpm -e --nodeps  > /dev/null 2>&1
            sleep 2
            echo "MySQL卸载完成!"
        else
            exit 0
        fi
    else
        echo "mysql检查结果:系统未安装MySQL."
    fi
}
function mysqlFile_check(){
    mysqlFile='find / -name mysql'
    if [ -n "$mysqlFile" ]; then
        echo "检测到服务器可能存在MySQL残留文件,文件列表如下:"
        find / -name mysql |xargs du --max-depth=0 -h   # 打印可能的MySQL残留文件及大小
        read -p "您要对这些文件怎么处理?(0:正常文件,不处理;1:我要手动删除;del:全部删除):" choose_delmysqlFile
        if [ "$choose_delmysqlFile" == 0 ] ;then
            return 0
        elif [ "$choose_delmysqlFile" == 1 ] ;then
            exit 0
        elif [ "$choose_delmysqlFile" == 'del' ] ;then
            echo "开始清理MySQL残留文件..."
            #清理冗余文件
            find / -name mysql |xargs rm -rf
            sleep 3
            rm -f /var/log/mysqld.log
            echo "MySQL残留文件清理成功!"
        else
            echo "输入错误,请选择0、1、del."
            exit 0
        fi
    else
        rm -f /var/log/mysqld.log
        echo "mysql残留文件检查结果:不存在MySQL残留文件"
    fi
}
function rpmType(){
    Start  # 是否开始
    check_user  # 检查用户
    check_mariadb  # 检查mariadb 
    mysql_check   # 检查MySQl
    mysqlFile_check  # 检查残留文件
}
rpmType

if [ ! -d $mysql_install_path ];then
      mkdir -p $mysql_install_path
      echo "目录以创建"
fi
sleep 2
cd /tmp/
tar -xvf $MYSQL_INSTALL_DIR -C $mysql_install_path 1>/dev/null 2>&1

cd $mysql_install_path 1>/dev/null 2>&1

echo -e "正在安装依赖"
yum install -y libaio net-tools openssl-devel 1>/dev/null 2>&1

echo "创建数据目录"
mkdir  -p $mysql_date
sleep 1

echo "创建日志目录"
mkdir  -p /home/mysql/log
sleep 1

#创建MYSQL用户和用户组
if grep -q "^$user:" /etc/group; then
    echo "用户组已存在"
else
    groupadd $user
    echo "用户组不存在,已创建"
fi

if grep -q "^$user" /etc/passwd; then
    echo "用户已经存在"
else
    useradd -r -g $user $user
    echo "用户不存在已创建"
fi

chown -R mysql:mysql $mysql_install_path
sleep 2

echo -e "正在安装,可能需要10分钟时间,请您稍等。。。。。。。"
rpm_list=(
    mysql-community-client-8.0.32-1.el7.x86_64.rpm
    mysql-community-client-plugins-8.0.32-1.el7.x86_64.rpm
    mysql-community-common-8.0.32-1.el7.x86_64.rpm
    mysql-community-debuginfo-8.0.32-1.el7.x86_64.rpm
    mysql-community-devel-8.0.32-1.el7.x86_64.rpm
    mysql-community-embedded-compat-8.0.32-1.el7.x86_64.rpm
    mysql-community-icu-data-files-8.0.32-1.el7.x86_64.rpm
    mysql-community-libs-8.0.32-1.el7.x86_64.rpm
    mysql-community-libs-compat-8.0.32-1.el7.x86_64.rpm
    mysql-community-server-8.0.32-1.el7.x86_64.rpm
    mysql-community-server-debug-8.0.32-1.el7.x86_64.rpm
    mysql-community-test-8.0.32-1.el7.x86_64.rpm
)
for install_rpm in ${rpm_list[@]}
do
    rpm -ivh ${install_rpm} 
done

echo -e "mysql 安装完成 "
sleep 1

echo -e "修改配置文件"
cat > /etc/my.cnf << EOF
[mysql]
prompt=(\\u@\\h) [\\d]>\\_

[mysqldump]
single-transaction = 1
master-data = 1

[mysqld]
server_id = 1
port = 3306
log-bin=mysql-bin
binlog_expire_logs_seconds=604800 #以秒为单位 7天
binlog_format = row

lower_case_table_names = 1
character_set_server=utf8mb4

datadir=/home/mysql/data/
socket=/home/mysql/data/mysql.sock

log-error=/home/mysql/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default_password_lifetime = 0
tmpdir = /tmp
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"

max_allowed_packet=32M
authentication_policy = sha256_password

EOF

systemctl start mysqld.service
mysql_password=$(grep 'temporary password' /home/mysql/log/mysqld.log | awk '{print $NF}')
echo -e "mysql密码为:"$mysql_password
sleep 2

is_start=$(ps -ef | grep mysqld | grep -v grep || netstat -tln | grep "3306 ")
#检查是否启动成功
if [ -n "$is_start" ];  then
    echo -e "MySQL 启动成功!"
else
    echo -e "MySQL 未启动!"
fi

#因为mysql默认安装在/var/lib/mysql 如果指定目录安装的话,需要把数据文件cp 到指定目录
echo -e "移动数据文件"
mv /var/lib/mysql/* /home/mysql/data/ 
sleep 1

echo -e "移动日志文件"
mv /var/log/mysqld.log /home/mysql/log/

chown -R mysql:mysql $mysql_install_path
sleep 1

#创建socket软连接
ln -s /home/mysql/data/mysql.sock /var/lib/mysql/mysql.sock

echo -e "重载mysql"
systemctl restart mysqld.service

##检查是否启动成功
if  [ -n "$is_start" ];  then
    echo -e "MySQL 已启动!"
else
    echo -e "MySQL 未启动!"
    exit 0
fi

cd /tmp
echo -e "修改root用户密码,创建test 用户并授权,加载sql脚本"
sleep 3
cat > test.sql << EOF

#ALTER USER 'root'@'localhost' IDENTIFIED BY 'Wzb@888888';
create database lq_income_platform;
CREATE USER 'test'@'%'IDENTIFIED BY 'Test@123';
GRANT ALL PRIVILEGES ON lq_income_platform.* TO 'test'@'%' WITH GRANT OPTION;
use lq_income_platform;
create table test(a int,b varchar(10));
insert into test(a,b) values(1,'test');
EOF

#修改mysql root用户密码
mysql_password=Wzb@888888
mysql  -u root -p$mysql_password < test.sql

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

繁华依在

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值