MySql自动安装脚本

news2025/3/12 10:11:49

一、脚本安装流程

1. 添加MySQL的Repository

  • 使用wget命令从MySQL官方网站下载Yum Repository的RPM包。
  • 使用rpm -ivh命令安装下载的RPM包,以添加MySQL的Yum Repository。

2. 安装mysql-community-server

  • 使用yum install -y mysql-community-server --nogpgcheck命令安装MySQL服务器。
  • 安装过程中会自动安装MySQL的依赖包。

3. 启动MySQL服务,获取临时密码

  • 使用systemctl start mysqld命令启动MySQL服务。
  • 使用systemctl enable mysqld命令设置MySQL服务开机自启动。
  • 从MySQL日志文件/var/log/mysqld.log中提取临时密码。

4. 修改密码

  • 使用mysql --connect-expired-password -uroot -p"$TEMP_PASSWD"命令登录MySQL。
  • 使用ALTER USER语句修改root用户的密码。
  • 验证新密码是否生效。

二、卸载MySQL流程

1. 停止MySQL服务

  • 使用systemctl stop mysqld命令停止MySQL服务。

2. 卸载MySQL相关包

  • 使用yum remove -y命令卸载所有与MySQL相关的包,包括mysql-community-clientmysql-community-server等。

3. 删除MySQL数据和日志文件

  • 使用rm -rf命令删除MySQL的数据目录/var/lib/mysql、日志文件/var/log/mysqld.log等。

4. 删除MySQL配置文件

  • 使用rm -rf命令删除MySQL的配置文件/etc/my.cnf/etc/my.cnf.d等。

5. 清理Yum Repository信息

  • 使用find命令删除/etc/yum.repos.d/目录下所有与MySQL相关的Repository文件。

6. 清理Yum缓存

  • 使用yum clean all命令清理Yum缓存。

三、Shell脚本

#!/bin/bash

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色

# 日志文件路径
LOG_FILE="/var/log/mysql_install.log"

# MySQL Yum Repository下载URL
DOWNLOAD_URL="https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm"
RPM_FILE=$(basename "$DOWNLOAD_URL")

# MySQL root密码
PASSWD='YourNewRootPasswordHere' # 请替换为实际的新密码

# 日志记录函数
log() {
  echo -e "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# 错误处理函数
error_exit() {
  log "${RED}ERROR: $1${NC}"
  exit 1
}

# 安装MySQL
install_mysql() {
  log "${GREEN}Adding MySQL Yum Repository...${NC}"
  wget -c "$DOWNLOAD_URL" || error_exit "Failed to download MySQL Yum Repository."
  if rpm -ivh "$RPM_FILE"; then
    log "${GREEN}Successfully added MySQL Yum Repository.${NC}"
  else
    error_exit "Failed to add MySQL Yum Repository."
  fi

  log "${GREEN}Updating Yum cache...${NC}"
  yum clean all || error_exit "Failed to clean Yum cache."
  if yum makecache; then
    log "${GREEN}Yum cache updated successfully.${NC}"
  else
    error_exit "Failed to update Yum cache."
  fi

  log "${GREEN}Installing MySQL...${NC}"
  if yum install -y mysql-community-server --nogpgcheck; then
    log "${GREEN}MySQL installed successfully.${NC}"
  else
    error_exit "Failed to install MySQL."
  fi

  log "${GREEN}Starting MySQL service...${NC}"
  if systemctl start mysqld; then
    log "${GREEN}MySQL service started successfully.${NC}"
  else
    error_exit "Failed to start MySQL service."
  fi

  systemctl enable mysqld
  sleep 5

  TEMP_PASSWD=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
  log "${YELLOW}Temporary password is: $TEMP_PASSWD${NC}"

  log "${GREEN}Changing root password...${NC}"
  mysql --connect-expired-password -uroot -p"$TEMP_PASSWD" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$PASSWD'; flush privileges;" &>/dev/null || error_exit "Failed to change root password."

  if mysql -uroot -p"$PASSWD" -e "status" &>/dev/null; then
    log "${GREEN}MySQL installation completed and root password changed successfully.${NC}"
    log "${GREEN}New root password is: $PASSWD${NC}"
  else
    error_exit "Failed to change root password, please check manually."
  fi

  rm -f "$RPM_FILE"
  log "${GREEN}Installation script completed successfully.${NC}"
}

# 卸载MySQL
uninstall_mysql() {
  if [ "$EUID" -ne 0 ]; then
    echo -e "${RED}Please run as root${NC}"
    exit 1
  fi

  MYSQL_PACKAGES=(
    mysql-community-client
    mysql-community-client-plugins
    mysql-community-common
    mysql-community-icu-data-files
    mysql-community-libs
    mysql-community-server
    mysql80-community-release
  )

  echo -e "${YELLOW}Stopping MySQL service...${NC}"
  systemctl stop mysqld || echo -e "${YELLOW}MySQL service already stopped.${NC}"

  for pkg in "${MYSQL_PACKAGES[@]}"; do
    if rpm -q "$pkg" &>/dev/null; then
      echo -e "${YELLOW}Uninstalling $pkg...${NC}"
      yum remove -y "$pkg"
    else
      echo -e "${YELLOW}$pkg is not installed.${NC}"
    fi
  done

  echo -e "${YELLOW}Deleting MySQL data and log files...${NC}"
  rm -rf /var/lib/mysql /var/log/mysqld.log /var/run/mysqld

  echo -e "${YELLOW}Deleting MySQL configuration files...${NC}"
  rm -rf /etc/my.cnf /etc/my.cnf.d /etc/mysql

  echo -e "${YELLOW}Cleaning up Yum repository information...${NC}"
  find /etc/yum.repos.d/ -type f -name "mysql-community*" -exec rm -f {} \;

  echo -e "${YELLOW}Cleaning Yum cache...${NC}"
  yum clean all

  echo -e "${GREEN}MySQL and its databases have been successfully removed from your system.${NC}"
}

# 用户界面
show_menu() {
  echo -e "${GREEN}===================================${NC}"
  echo -e "${GREEN}  MySQL Installation/Uninstallation  ${NC}"
  echo -e "${GREEN}===================================${NC}"
  echo -e "1. Install MySQL"
  echo -e "2. Uninstall MySQL"
  echo -e "3. Exit"
  echo -e "${GREEN}===================================${NC}"
  read -p "Please choose an option (1/2/3): " choice
  case $choice in
    1) install_mysql ;;
    2) uninstall_mysql ;;
    3) exit 0 ;;
    *) echo -e "${RED}Invalid option, please try again.${NC}" && show_menu ;;
  esac
}

# 主函数
main() {
  show_menu
}

# 执行主函数
main

四、脚本说明

  • 日志记录:脚本中的所有操作都会记录到/var/log/mysql_install.log文件中,方便后续排查问题。
  • 错误处理:如果某个步骤失败,脚本会立即停止并输出错误信息。
  • 用户界面:脚本提供了一个简单的用户界面,用户可以选择安装或卸载MySQL。
  • 卸载功能:卸载功能会彻底删除MySQL及其相关文件,确保系统干净。

五、使用说明

  1. 安装MySQL

    • 运行脚本后选择1,脚本会自动下载并安装MySQL,设置root密码。
  2. 卸载MySQL

    • 运行脚本后选择2,脚本会卸载MySQL并删除所有相关文件和配置。
  3. 退出脚本

    • 运行脚本后选择3,脚本会直接退出。

代码仓库地址:https://gitee.com/lv-tinghu/linux-script.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32-I2C通信外设

目录 一:I2C外设简介 二:I2C外设数据收发 三:I2C的复用端口 四:主机发送和接收 五:硬件I2C读写MPU6050 相关函数: 1.I2C_ GenerateSTART 2.I2C_ GenerateSTOP 3.I2C_ AcknowledgeConfig 4.I2C…

【脚本】Linux一键扩大虚拟内存的大小

Linux增加虚拟内存其实很简单 就那几个命令,free、mkswap、swapon 但是方便起见我写成了脚本 使用方法 进入你的目录, nano ./install_swap.sh 下面的脚本全文复制,粘贴进去之后,按ctrlx后按y保存 然后运行以下命令 sudo bash …

信号隔离器 0-20mA/0-10V模拟信号隔离模块变送器 一进二出高精度

信号隔离器 0-20mA/0-10V模拟信号隔离模块变送器 一进二出高精度https://item.taobao.com/item.htm?ftt&id766022047828 型号 一进二出 0-20mA 转0-20mA/0-10V MS-C12 一进二出 0-10V 转 0-20mA/0-10V MS-V12 信号隔离器 单组输出 MS-C1/V1 双组输出 MS-C12/V12 用于…

Nat. Methods | scPerturb——单细胞扰动数据的标准化资源与统计分析方法

《Nature Methods》提出scPerturb资源平台,整合44个单细胞扰动数据集(涵盖转录组、表观组、蛋白组读值),并通过能量统计量(E-statistics)量化扰动效应,旨在解决单细胞扰动数据的互操作性差、缺乏…

【易康eCognition实验教程】005:影像波段组合显示与单波段显示

文章目录 一、加载多波段影像二、单波段显示三、彩色显示一、加载多波段影像 二、单波段显示 如果导入的影像数据具有三个或者更多的波段,影像场景将自动以RGB(红绿蓝)模式默认显示,如上图所示。在视图设置(View Settings)窗口中使用单波段灰度显示(Single LayuerGrays…

使用Process Explorer、Dependency Walker和PE信息查看工具快速排查dll动态库因库与库版本不一致导致的加载失败问题

目录 1、问题说明 2、使用Process Explorer查看目标dll动态库有没有动态加载起来 3、使用Dependency Walker查看xxpadll.dll库的库依赖关系,找到xxpadll.dll加载失败的原因 4、使用PE信息查看工具查看目标dll库的时间戳 5、关于xxsipstack2.dll中调用xxdatanet…

Git的命令学习——适用小白版

浅要了解一下Git是什么: Git是目前世界上最先进的的分布式控制系统。Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上…

如何安全处置旧设备?

每年,数百万台旧设备因老化、故障或被新产品取代而被丢弃,这些设备上存储的数据可能带来安全风险。 如果设备没有被正确删除数据,这些数据往往仍可被恢复。因此,安全处置旧设备至关重要。 旧设备可能包含的敏感数据 旧设备中可能…

Java 学习记录:基础到进阶之路(一)

今天,让我们深入到 Java 项目构建、基础语法及核心编程概念的领域,一探究竟。 软件安装及环境配置请查看之前更新的博客有着详细的介绍: IDEA软件安装&环境配置&中文插件-CSDN博客 目录 1.Java 项目构建基础 1.项目中的 SRC 目录…

系统架构设计师—系统架构设计篇—软件架构风格

文章目录 概述经典体系结构风格数据流风格批处理管道过滤器对比 调用/返回风格主程序/子程序面向对象架构风格层次架构风格 独立构件风格进程通信事件驱动的系统 虚拟机风格解释器基于规则的系统 仓库风格(数据共享风格)数据库系统黑板系统超文本系统 闭…

工厂模式加策略模式 -- 具体实现

这里写目录标题 定义接口定义抽象类定义主处理器分支处理器定义工厂demo 定义接口 public interface EntityHandler extends InitializingBean {MatchContentDTO match(MatchEntityDTO matchEntityDTO);String supportEntityType(); }定义抽象类 public abstract class Abstr…

STM32---FreeRTOS消息队列

一、简介 1、队列简介: 队列:是任务到任务,任务到中断、中断到任务数据交流的一种机制(消息传递)。 FreeRTOS基于队列,实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二值信号量…

python-leetcode-删掉一个元素以后全为 1 的最长子数组

1493. 删掉一个元素以后全为 1 的最长子数组 - 力扣(LeetCode) 可以使用滑动窗口的方式来解决这个问题。我们要找到最长的全 1 子数组,但必须删除一个元素,因此可以将问题转化为寻找最多包含一个 0 的最长子数组。 解题思路 使用双指针(滑动窗口),维护窗口内最多包含一…

【赵渝强老师】PostgreSQL的模板数据库

在PostgreSQL中,创建数据库时实际上通过拷贝一个已有数据库进行工作的。在默认情况下,将拷贝名为template1的标准系统数据库。所以该数据库是创建新数据库的“模板”。如果为template1数据库增加对象,这些对象将被拷贝到后续创建的用户数据库…

vue2中,在table单元格上右键,对行、列的增删操作(模拟wps里的表格交互)

HTML <template><div><divclass"editable-area"v-html"htmlContent"contenteditableblur"handleBlur"contextmenu.prevent"showContextMenu"></div><button click"transformToMd">点击转成M…

使用DeepSeek+蓝耘快速设计网页简易版《我的世界》小游戏

前言&#xff1a;如今&#xff0c;借助先进的人工智能模型与便捷的云平台&#xff0c;即便是新手开发者&#xff0c;也能开启创意游戏的设计之旅。DeepSeek 作为前沿的人工智能模型&#xff0c;具备强大的功能与潜力&#xff0c;而蓝耘智算云平台则为其提供了稳定高效的运行环境…

解决微信小程序中调用流式接口,处理二进制数据时 TextDecoder 不兼容的问题

问题复现 最近在开发一个 AI 问答小程序时&#xff0c;由于接口返回的是流式二进制数据&#xff0c;因此我使用了 TextDecoder 的 decode 方法将二进制数据转换为文本。在开发环境中&#xff0c;数据处理一直没有问题&#xff0c;但在真机测试及上线后&#xff0c;发现调用接口…

Java 大视界 -- Java 大数据在智慧农业农产品质量追溯与品牌建设中的应用(124)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

c++介绍信号六

信号量是c中实现对有限资源访问控制&#xff0c;现成通过信号量获得对资源访问的许可。可用资源大于0&#xff0c;线程可以对资源进行访问&#xff0c;此时计数器减1。当计数器为0时&#xff0c;不可访问资源&#xff0c;线程进入等待。当资源释放时&#xff0c;线程结束等待&a…

GStreamer —— 2.18、Windows下Qt加载GStreamer库后运行 - “播放教程 6:音频可视化“(附:完整源码)

运行效果 介绍 GStreamer 带有一组将音频转换为视频的元素。他们 可用于科学可视化或为您的音乐增添趣味 player 的本教程展示了&#xff1a; • 如何启用音频可视化 • 如何选择可视化元素 启用音频可视化实际上非常简单。设置相应的标志&#xff0c;当纯音频流为 found&#…