MySQL自動安裝腳本分享

来源:https://www.cnblogs.com/kerrycode/archive/2023/07/03/17524379.html
-Advertisement-
Play Games

這裡分享一個我寫的MySQL自動安裝腳本mysql_auto_install.sh,它的功能非常簡單,就是自動化安裝MySQL單實例,讓DBA的工作更簡單、輕鬆一些,不用去手工安裝MySQL實例。從簡單重覆的工作中釋放出來。 下麵是關於mysql_auto_install.sh腳本的一些說明: 1: ...


這裡分享一個我寫的MySQL自動安裝腳本mysql_auto_install.sh,它的功能非常簡單,就是自動化安裝MySQL單實例,讓DBA的工作更簡單、輕鬆一些,不用去手工安裝MySQL實例。從簡單重覆的工作中釋放出來。

下麵是關於mysql_auto_install.sh腳本的一些說明:

  • 1:這個腳本運行在mysql用戶下(註意,root用戶下運行會報錯,需要修改部分地方),主要原因是因為DBA沒有root賬號許可權,只有mysql用戶的許可權。另外,我也寫了一個mysql_auto_install_root.sh腳本,這個腳本是在root用戶下麵運行,功能更多一些。暫時還在測試當中。

  • 2:此腳本運行在mysql用戶下,因為許可權問題,不會禁用透明大頁,卸載RPM包,調整內核參數、配置systemctl服務等操作,這些工作交給系統管理員處理。而且我們也假設這些都已經是設定好了的。

  • 3:此腳本只適用於Linux,不適用HP-UX等操作系統。

  • 4:my.cnf的模板中的參數要跟腳本中的參數一致。否則可能有問題。另外模板中參數設置請自己保證正確性與合理性。

  • 5:腳本經過多次測試驗證,但是並不保證各種場景都沒有bug。發現問題,歡迎反饋,我自己也在不斷完善、改進這個腳本。

  • 6: 安裝前,要準備好MySQL安裝介質、mysql_auto_install.sh、alter_root_passwd.sql,my.cnf的模板(這裡命名為mysql8_template.cnf)

其中alter_root_passwd.sql是修改root密碼的腳本,如下所示,根據實際情況輸入密碼,安裝完成後,刪除此腳本。

ALTER USER 'root'@'localhost' IDENTIFIED BY '********';
flush privileges;

mysql_auto_install.sh腳本的詳情如下(格式可能因為代碼插件展示問題,有所混亂,請自行調整。原始腳本格式不會有下麵亂七八糟的縮進或不對齊問題)

#!/bin/bash

#########################################################################################
#                                                                                       #
# This script is used for auto install mysql 8.0.xx                                     #
#                                                                                       #
#########################################################################################
#                                                                                       #
# ScriptName            :    mysql_auto_install.sh                                      #
# Author                :    瀟湘隱者                                                   #
# CreateDate            :    2019-09-06                                                 #
# Blogs                 :    www.cnblogs.com/kerrycode                                  #
# Email                 :    [email protected]                                       #
#***************************************************************************************#
# 參數配置                                                                              #
#---------------------------------------------------------------------------------------#
# MYSQL_BASE_DIR        /opt/mysql                                                      #
# MYSQL_DATA_DIR        /data/mysql                                                     #
# MYSQL_PORT            3306                                                            #
# LOG_OUT_TYPE          log                                                             #
#---------------------------------------------------------------------------------------#
# 註意事項:                                                                            #
#   1:如果維護的MySQL資料庫都規範化安裝、配置的化,下麵很多參數都不需要修改            #
#   2:my.cnf模板很重要,如果配置有問題,可能導致安裝失敗。腳本裡面有些參數設定都是依賴 #
#       my.cnf模板中的設置,請確保你的my.cnf模板中設定跟腳本參數一致                    #
#   3:此腳本在mysql用戶下安裝,很多操作受限,例如禁用透明大頁、卸載rpm包,調整內核參數 #
#      如需處理這些 建議使用另外一個版本的腳本處理。此處設定系統管理員已經處理好這些事情#
#      **註意**:此腳本只能在mysql用戶下運行,root用戶下需要修改部分地方纔能成功        #
#---------------------------------------------------------------------------------------#
#***************************************************************************************#
# Version        Modified Date            Description                                   #
#***************************************************************************************#
# V.1.0          2019-09-06              創建此腳本                                     #
# V.1.1          2019-10-26              按SHELL編程規範,重新命名規範各類對象          #
# V.2.0          2023-06-16              重新改寫該腳本,增加驗證/優化步驟              #
#########################################################################################

# MySQL的安裝路徑:basedir的上層目錄
MYSQL_BASE_DIR=/opt/mysql
# MySQL數據目錄:datadir的上層目錄
MYSQL_DATA_DIR=/data/mysql
# MySQL安裝日誌信息
MYSQL_INSTALL_LOG=/tmp/soft/mysql_install.log
# MySQL壓縮包路徑
MYSQL_INSTALLER_DIR=/tmp/soft
# MySQL安裝介質
# 註意事項,如果安裝介質不是tar.xz ,請修改代碼中tar.xz
MYSQL_INSTALLER=$MYSQL_INSTALLER_DIR/mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz
# MySQL的my.cnf模板
MYSQL_CONFIG_FILE=$MYSQL_INSTALLER_DIR/mysql8_template.cnf
# alter_root_passwd文件
SQL_ALTER_USER_PWD=$MYSQL_INSTALLER_DIR/alter_root_passwd.sql
# Log輸出方式:log 或out或all
LOG_OUT_TYPE=all
# MySQL的埠號
MYSQL_PORT=3306

# 記錄安裝過程的日誌信息
function log_info()
{
    #判斷參數個數
    if [ $# -eq 1 ];then
        local log_msg=$1
    else
        echo "[error]:`date '+%Y%m%d %H:%M:%S'`> the number of parameters is incorrect!"
    fi
    
:<<EOF
    if [ $LOG_OUT_TYPE = "print" ];then
        echo "[info ]: `date`> $log_msg"
    else
        echo "[info ]: `date`> $log_msg" >> $MYSQL_INSTALL_LOG
    fi
EOF
    case $LOG_OUT_TYPE in
        out)
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg"
            ;;
        log)
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
            ;;
        all)
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg"
            echo "[info ]: `date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
            ;;
        *)
    esac
        
}

# 記錄安裝過程的錯誤信息
function log_error()
{
    #判斷參數個數
    if [ $# -eq 1 ];then
        local log_msg=$1
    else
        echo "[error]:`date '+%Y%m%d %H:%M:%S'`> the number of parameters is incorrect!"
    fi
    
:<<EOF
    if [ $LOG_OUT_TYPE = "print" ];then
        echo "[error]:`date`> $log_msg"
    else
        echo "[error]:`date`> $log_msg" >> $MYSQL_INSTALL_LOG
    fi
EOF
    case $LOG_OUT_TYPE in
        out)
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg"
             ;;
        log)
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
             ;;
        all)
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg"
             echo  "[error]:`date '+%Y%m%d %H:%M:%S'`> $log_msg" >> $MYSQL_INSTALL_LOG
             ;;
        *)
    esac
}

# 卸載系統自帶的MARIADB
#rpm -qa|grep mariadb |xargs yum remove -y > /dev/null

function check_env_setting()
{
    # 檢查操作系統是否Linux(此腳本不適用HP-UX/SunOS/AIX)
    if [ `uname -s`="Linux" ];then
        log_info "The os is linux,mysql auto install continue..."
    else
        log_error "the os is not linux, please check it."
        exit 1
    fi

    # 檢查存放安裝包目錄是否存在
    if [ ! -d "$MYSQL_INSTALLER_DIR" ];then
        log_error "the mysql installer directory $MYSQL_INSTALLER_DIR didn't exists, please check it"
        exit 1
    else
        log_info "the mysql installer directory $MYSQL_INSTALLER_DIR exist, mysql auto install continue...";
    fi
    
    # 檢查MySQL安裝文件是否存在
    if [ ! -f "$MYSQL_INSTALLER" ];then
        log_error "the mysql installer file $MYSQL_INSTALLER didn't exist, please check it"
        exit 1
    else
        log_info  "the mysql installer file $MYSQL_INSTALLER exist, mysql auto install continue..."
    fi
    
    # 檢查MySQL的my.cnf的模板文件是否存在
    if [ ! -f $MYSQL_CONFIG_FILE ];then
        log_error "the mysql configuration template file $MYSQL_CONFIG_FILE did'nt exist, please check it"
        exit 1
    else
        log_info "the mysql configuration  template file $MYSQL_CONFIG_FILE exists,mysql auto install continue..."
    fi
    
    # 檢查修改mysql資料庫用戶root密碼的SQL文件是否存在。
    if [ ! -f $SQL_ALTER_USER_PWD ];then
        log_error "the sql file $SQL_ALTER_USER_PWD did'nt exist, please check it"
        exit 1
    else
        log_info "the sql file $SQL_ALTER_USER_PWD exists,mysql auto install continue..."
    fi
    
    
    # 檢查MySQL安裝目錄的上層目錄是否存在
    if [ ! -d "$MYSQL_BASE_DIR" ];then
        log_error "the $MYSQL_BASE_DIR didn't exists, please check it"
        exit 1
    else
        log_info "the $MYSQL_BASE_DIR exists, mysql auto install continue..."
    fi
    
    # 檢查MYSQL_DATA_DIR對應的目錄是否存在,此目錄為datadir的上一層目錄
    if [ ! -d "$MYSQL_DATA_DIR" ];then
        log_error "the $MYSQL_DATA_DIR didn't exists, please check it"
        exit 1
    else
        log_info "the $MYSQL_DATA_DIR exists, mysql auto install continue..."
    fi
    
    # 檢查MYSQL_DATA_DIR目錄下是否存在其目錄,如果有其它目錄,則退出安裝(擔心已經安裝了MySQL實例)
    if [ -d ${MYSQL_DATA_DIR} -a "`ls -A ${MYSQL_DATA_DIR}`" != "" ];then
        log_error "the $MYSQL_DATA_DIR directory have exists files,plese check it"
        exit 1
    else 
        log_info "the $MYSQL_DATA_DIR check is ok ,mysql auto install continue..."
    fi
    
    # 驗證MySQL安裝介質的MD5
    
    
    # 檢查是否存在MySQL實例
    mysql_status=`netstat -nl | awk 'NR>2{if ($4 ~ /.*:'${MYSQL_PORT}'/) {print "Yes";exit 0}}'`
    echo $mysql_status
    if [ "$mysql_status" = "Yes" ];then
        log_error "MySQL instance exists. please check it"
        exit 1
    else
        #只能作為一個依據,並不能完全保證。
        log_info "MySQL instance didn't exists,mysql auto install continue..."
    fi
    
    echo "check_env_setting run successful."
    #read ANS
    read -n1 -p "Do you want to continue [Y/N]?" answer
    case $answer in
        Y | y)
            log_info "mysql auto install continue...";;
        N | n)
            log_info "mysql auto install exit.";;
        *)
            log_error "your choice is wrong!";;
    esac

}

# 創建MySQL用戶和用戶組(此處註釋,用戶由系統管理員創建)
#echo '[info]: create the mysql user...'
#groupadd mysql
#/usr/sbin/groupadd mysql
#useradd -g mysql mysql
#/usr/sbin/useradd -g mysql mysql


# 創建MySQL的相關目錄
function create_mysql_dir()
{
    cd $MYSQL_DATA_DIR
    mkdir conf data  logs  slow_logs  bin_logs  mysql_temp
    chmod 750  $MYSQL_DATA_DIR
    #對目錄進行授權
    chmod -R 760  $MYSQL_DATA_DIR/bin_logs
    chmod -R 700  $MYSQL_DATA_DIR/logs
    chmod -R 760  $MYSQL_DATA_DIR/slow_logs
}

function mysql_cnf_setting()
{
    # 拷貝my.cnf的模板配置文件,這裡不打算直接寫入生成my.cnf文件
    cp $MYSQL_CONFIG_FILE $MYSQL_DATA_DIR/conf/my.cnf
    if [ $? -ne 0 ];then
        log_error 'failed to cp the my.cnf,please check it'
        exit 1
    else
        log_info  "cp the $MYSQL_CONFIG_FILE to my.cnf success!"
    fi
}

function mysql_env_setting()
{
    # 設置環境變數
    local env_exist=`cat ~/.bash_profile |grep -E "MYSQL_HISTFILE|$MYSQL_BASE_DIR/mysql8.0/bin" | wc -l`
    if [ $env_exist -eq 0 ];then
        echo "export PATH=\$PATH:$MYSQL_BASE_DIR/mysql8.0/bin" >> ~/.bash_profile
        echo "export MYSQL_HISTFILE=/dev/null" >> ~/.bash_profile
        source ~/.bash_profile
    else
        log_info "the environment variable exists, please check it!"
    fi
}



# 解壓MySQL的二進位安裝包
function mysql_install()
{
    echo '[info]:unzip the mysql installation media....'
    tar -xvf $MYSQL_INSTALLER -C $MYSQL_BASE_DIR
    if [ $? -ne 0 ];then
        log_error "mysql media unzip failed,please check the detail."
        exit
    else
        log_info  "mysql media unzip success,mysql auto install continue..."
    fi
    
    
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # WPF複習知識點記錄 由於近幾年主要在做Web項目,客戶端的項目主要是以維護為主,感覺對於基礎知識的掌握沒有那麼牢靠,趁著這個周末重新複習下WPF的相關知識。 文章內容主要來自大佬劉鐵錳老師的經典著作《深入淺出WPF》。 因為是複習,所以知識內容不會一一記錄,如有需要瞭解更多可以看書中內容。 * ...
  • 本章將和大家分享使用 SignalR 生成實時應用的基礎知識。通過本文您將學習如何:使用ASP.NET Core SignalR + MVC + Vue 2.x + require 最終創建一個正常運行的簡易聊天應用。 ...
  • 假設有以下兩個實體: public class Student { public int StuID { get; set; } public string? Name { get; set; } public IEnumerable<Homework>? Homeworks { get; set; ...
  • # 一個跨平臺的`ChatGPT`懸浮窗工具 使用`avalonia`實現的`ChatGPT`的工具,設計成懸浮窗,並且支持插件。 ## 如何實現懸浮窗? 在使用`avalonia`實現懸浮窗也是非常的簡單的。 實現我們需要將窗體設置成無邊框 在`Window`根節點添加一下屬性,想要在Linux下 ...
  • 繼上篇:Taurus .Net Core 微服務開源框架:Admin 插件【4-2】 - 配置管理-Mvc【含請求日誌列印】,本篇繼續介紹下一個內容:系統配置節點:Mvc - Plugin - MicroService 配置界面:註冊中心 ...
  • Linux下PAM認證詳解(以centos7為例) PAM簡介(Pluggable Authentication Modules,可插拔認證模塊) Sun公司於1995年開發的一種與認證相關的通用框架機制:PAM(可插拔認證模塊)是實現認證工作的一個模塊。 因為每個服務都用到不同的認證方式,所以就需 ...
  • CS5466作為ASL集睿致遠新推出的高性能Type-C to HDMI2.1協議轉換器,可以通過HDMI輸出埠作為TMDS或FRL發射機進行操作。 CS5466適配於多個配件市場和現實應用主板,例如:主板,顯示埠,擴展塢等。CS5266還配備了最高級別的HDCP嵌入式秘鑰,能夠安全傳輸受保護... ...
  • # Linux磁碟操作:分區、格式化、掛載 ## 一、分區 > **fdisk分區** > > (1)fdisk命令只支持msdos,分區的時候只支持小容量硬碟( (2)fdisk命令不支持gpt,所以當使用fdisk命令給gpt類型硬碟分區是會出現告警 1. 首先先把設備關機,添加一塊新的磁碟 2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...