当前位置: 首页 > news >正文

MySQL8 一键部署

#!/bin/bash

### 定义变量
mysql_download_url=https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
mysql_package_name=mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
mysql_dec_name=mysql-8.0.33-linux-glibc2.12-x86_64
mysql_download_dir="/usr/local/src"
mysql_base_dir="/usr/local/mysql"
mysql_data_dir="/data/mysql"
mysql_root_password=!@#123QAz


ck_ok()
{
    if [ $? -ne 0 ]
    then 
        echo "$1 error."
        exit 1
    fi
}

dependon_install()
{
    if which yum >/dev/null 2>&1
    then
        for pkg in "$@"
        do
            if ! rpm -q ${pkg} >/dev/null 2>&1
            then
                sudo yum install -y ${pkg}
            else
                echo "${pkg}已安装"
            fi
        done
    fi
    
    if which apt >/dev/mull 2>&1
    then
        for pkg in "$@"
        do
            if ! dpkg -l ${pkg} >/dev/null 2>&1
            then
                sudo apt install -y ${pkg}
            else
                echo "${pkg}已安装"
            fi
        done
    fi
}

download_mysql()
{    
    cd ${mysql_download_dir}
    if [ -f ${mysql_package_name} ]
    then
        echo "当前目录已经存在mysql安装包"
        echo "检测MD5"
        file_md5=`md5sum ${mysql_package_name} | awk '{print $1}'`
        if [ ${file_md5} == '0bb9fd978d8b122d7846efc37884c0bb' ]
        then 
            return 0
        else
            echo "file ${mysql_package_name} check failed"
            /bin/mv -f ${mysql_package_name} ${mysql_package_name}.old
        fi
    fi
    dependon_install wget
    ck_ok "wget安装"
    
    sudo wget ${mysql_download_url}
    ck_ok "下载mysql"    
}

install_mysql()
{
    cd /usr/local
    if [ -d ${mysql_base_dir} ]
    then
        echo "${mysql_base_dir}已存在,移走"
        sudo /bin/mv -f ${mysql_base_dir} ${mysql_base_dir}.old
    fi

    sudo tar Jxf ${mysql_download_dir}/${mysql_package_name}
    ck_ok "解压mysql压缩包"
    sudo /bin/mv -f ${mysql_dec_name} mysql
    
    if id mysql &>/dev/null
    then
        echo "系统已经创建了mysql用户,跳过创建"
    else
        echo "创建mysql用户"
        sudo useradd -s /sbin/nologin mysql
    fi
    ck_ok "创建mysql用户"
    
    if [ -d ${mysql_data_dir} ]
    then
        echo "${mysql_data_dir}已存在,移走"
        sudo /bin/mv -f ${mysql_data_dir} ${mysql_data_dir}.old
    fi
    echo "创建MySQL data_dir"
    sudo mkdir -p ${mysql_data_dir}
    sudo chown -R mysql ${mysql_data_dir}
    
    if [ -f ${mysql_base_dir}/my.cnf ]
    then
        echo "MySQL配置文件已存在,移走"
        sudo /bin/mv -f ${mysql_base_dir}/my.cnf ${mysql_base_dir}/my.cnf.old
    fi
    echo "创建MySQL配置文件my.cnf"
    cat > /tmp/my.cnf <<EOF
[mysqld]
user = mysql
port = 3306
server_id = 1
basedir = ${mysql_base_dir}
datadir = ${mysql_data_dir} 
socket = /tmp/mysql.sock
pid-file= ${mysql_data_dir}/mysqld.pid
log-error = ${mysql_data_dir}/mysql.err
EOF
    sudo /bin/mv /tmp/my.cnf ${mysql_base_dir}/my.cnf
    
    dependon_install ncurses-compat-libs libaio-devel
    
    sudo ${mysql_base_dir}/bin/mysqld --console --datadir=${mysql_data_dir} --initialize-insecure --user=mysql
    ck_ok "初始化"
    
    if [ -f /usr/lib/systemd/system/mysqld.service ]
    then    
        echo "mysql服务启动脚本已存在,移走"
        sudo /bin/mv -f /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service.old
    fi
    echo "创建mysql服务启动脚本"
    cat > /tmp/mysqld.service <<EOF
[Unit]
Description=MySQL server
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=${mysql_base_dir}/bin/mysqld --defaults-file=${mysql_base_dir}/my.cnf --daemonize $OPTIONS
ExecReload=/bin/kill -HUP -$MAINPID
ExecStop=/bin/kill -QUIT $MAINPID
KillMode=process
LimitNOFILE=65535
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false
EOF

    sudo /bin/mv /tmp/mysqld.service /usr/lib/systemd/system/mysqld.service
    sudo systemctl unmask mysqld
    sudo systemctl daemon-reload
    sudo systemctl enable mysqld
    sudo systemctl start mysqld
    ck_ok "启动mysql"
    
    ${mysql_base_dir}/bin/mysqladmin -S/tmp/mysql.sock -uroot password "${mysql_root_password}"
    ck_ok "设置mysql密码"
    
    unlink /usr/bin/mysql &>/dev/null
    ln -s /usr/local/mysql/bin/mysql /usr/bin
}

main()
{
    download_mysql
    install_mysql
}

main

相关文章:

  • 插入排序 InsertionSort
  • 多线程编程设计模式(单例,阻塞队列,定时器,线程池)
  • asp.net core 教程
  • flutter flutter pub cache clean和flutter clean区别
  • 04-获取认证的用户身份信息
  • DS|串应用
  • Mybatis SQL构建器类 - SqlBuilder and SelectBuilder (已经废弃)
  • LOAM: Lidar Odometry and Mapping in Real-time 论文阅读
  • 【Jmeter】Jmeter基础9-BeanShell介绍
  • 云上安全责任共担模型
  • Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
  • vue、react、angular 区别
  • C语言-第十七周做题总结-数组2
  • AJAX:整理1: 了解AJAX的相关知识
  • Android 电话拨打界面按back键不结束通话活动
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 07.Android之多媒体问题
  • Android交互
  • express + mock 让前后台并行开发
  • Gradle 5.0 正式版发布
  • jdbc就是这么简单
  • js对象的深浅拷贝
  • js中的正则表达式入门
  • MYSQL 的 IF 函数
  • PHP的类修饰符与访问修饰符
  • QQ浏览器x5内核的兼容性问题
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Shell编程
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • WePY 在小程序性能调优上做出的探究
  • 程序员最讨厌的9句话,你可有补充?
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端性能优化——回流与重绘
  • 学习HTTP相关知识笔记
  • 白色的风信子
  • 7行Python代码的人脸识别
  • #13 yum、编译安装与sed命令的使用
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (20050108)又读《平凡的世界》
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (a /b)*c的值
  • (二)fiber的基本认识
  • (六)c52学习之旅-独立按键
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四) 虚拟摄像头vivi体验
  • (四)JPA - JQPL 实现增删改查
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (新)网络工程师考点串讲与真题详解
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)菜鸟学数据库(三)——存储过程
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET 4.0中的泛型协变和反变
  • .NET Core跨平台微服务学习资源
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 的静态构造函数是否线程安全?答案是肯定的!