MySQL自動安裝腳本代碼實例分享
這里分享一個我寫的MySQL自動安裝腳本mysql_auto_install.sh,它的功能非常簡單,就是自動化安裝MySQL單實例,讓DBA的工作更簡單、輕松一些,不用去手工安裝MySQL實例。從簡單重復(fù)的工作中釋放出來。
下面是關(guān)于mysql_auto_install.sh腳本的一些說明:
1:這個腳本運行在mysql用戶下(注意,root用戶下運行會報錯,需要修改部分地方),主要原因是因為DBA沒有root賬號權(quán)限,只有mysql用戶的權(quán)限。另外,我也寫了一個mysql_auto_install_root.sh腳本,這個腳本是在root用戶下面運行,功能更多一些。暫時還在測試當(dāng)中。
2:此腳本運行在mysql用戶下,因為權(quán)限問題,不會禁用透明大頁,卸載RPM包,調(diào)整內(nèi)核參數(shù)、配置systemctl服務(wù)等操作,這些工作交給系統(tǒng)管理員處理。而且我們也假設(shè)這些都已經(jīng)是設(shè)定好了的。
3:此腳本只適用于Linux,不適用HP-UX等操作系統(tǒng)。
4:my.cnf的模板中的參數(shù)要跟腳本中的參數(shù)一致。否則可能有問題。另外模板中參數(shù)設(shè)置請自己保證正確性與合理性。
5:腳本經(jīng)過多次測試驗證,但是并不保證各種場景都沒有bug。發(fā)現(xiàn)問題,歡迎反饋,我自己也在不斷完善、改進這個腳本。
6: 安裝前,要準(zhǔn)備好MySQL安裝介質(zhì)、mysql_auto_install.sh、alter_root_passwd.sql,my.cnf的模板(這里命名為mysql8_template.cnf)
其中alter_root_passwd.sql是修改root密碼的腳本,如下所示,根據(jù)實際情況輸入密碼,安裝完成后,刪除此腳本。
ALTER?USER?'root'@'localhost'?IDENTIFIED?BY?'********'; flush?privileges;
mysql_auto_install.sh腳本的詳情如下(格式可能因為代碼插件展示問題,有所混亂,請自行調(diào)整。原始腳本格式不會有下面亂七八糟的縮進或不對齊問題)
#!/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?????????????????:????kerry2008code@qq.com???????????????????????????????????????#
#***************************************************************************************#
#?參數(shù)配置??????????????????????????????????????????????????????????????????????????????#
#---------------------------------------------------------------------------------------#
#?MYSQL_BASE_DIR????????/opt/mysql??????????????????????????????????????????????????????#
#?MYSQL_DATA_DIR????????/data/mysql?????????????????????????????????????????????????????#
#?MYSQL_PORT????????????3306????????????????????????????????????????????????????????????#
#?LOG_OUT_TYPE??????????log?????????????????????????????????????????????????????????????#
#---------------------------------------------------------------------------------------#
#?注意事項:????????????????????????????????????????????????????????????????????????????#
#???1:如果維護的MySQL數(shù)據(jù)庫都規(guī)范化安裝、配置的化,下面很多參數(shù)都不需要修改????????????#
#???2:my.cnf模板很重要,如果配置有問題,可能導(dǎo)致安裝失敗。腳本里面有些參數(shù)設(shè)定都是依賴?#
#???????my.cnf模板中的設(shè)置,請確保你的my.cnf模板中設(shè)定跟腳本參數(shù)一致????????????????????#
#???3:此腳本在mysql用戶下安裝,很多操作受限,例如禁用透明大頁、卸載rpm包,調(diào)整內(nèi)核參數(shù)?#
#??????如需處理這些?建議使用另外一個版本的腳本處理。此處設(shè)定系統(tǒng)管理員已經(jīng)處理好這些事情#
#??????**注意**:此腳本只能在mysql用戶下運行,root用戶下需要修改部分地方才能成功????????#
#---------------------------------------------------------------------------------------#
#***************************************************************************************#
#?Version????????Modified?Date????????????Description???????????????????????????????????#
#***************************************************************************************#
#?V.1.0??????????2019-09-06??????????????創(chuàng)建此腳本?????????????????????????????????????#
#?V.1.1??????????2019-10-26??????????????按SHELL編程規(guī)范,重新命名規(guī)范各類對象??????????#
#?V.2.0??????????2023-06-16??????????????重新改寫該腳本,增加驗證/優(yōu)化步驟??????????????#
#########################################################################################
#?MySQL的安裝路徑:basedir的上層目錄
MYSQL_BASE_DIR=/opt/mysql
#?MySQL數(shù)據(jù)目錄:datadir的上層目錄
MYSQL_DATA_DIR=/data/mysql
#?MySQL安裝日志信息
MYSQL_INSTALL_LOG=/tmp/soft/mysql_install.log
#?MySQL壓縮包路徑
MYSQL_INSTALLER_DIR=/tmp/soft
#?MySQL安裝介質(zhì)
#?注意事項,如果安裝介質(zhì)不是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()
{
????#判斷參數(shù)個數(shù)
????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()
{
????#判斷參數(shù)個數(shù)
????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
}
#?卸載系統(tǒng)自帶的MARIADB
#rpm?-qa|grep?mariadb?|xargs?yum?remove?-y?>?/dev/null
function?check_env_setting()
{
????#?檢查操作系統(tǒng)是否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數(shù)據(jù)庫用戶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對應(yīng)的目錄是否存在,此目錄為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目錄下是否存在其目錄,如果有其它目錄,則退出安裝(擔(dān)心已經(jīng)安裝了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安裝介質(zhì)的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
????????#只能作為一個依據(jù),并不能完全保證。
????????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
}
#?創(chuàng)建MySQL用戶和用戶組(此處注釋,用戶由系統(tǒng)管理員創(chuàng)建)
#echo?'[info]:?create?the?mysql?user...'
#groupadd?mysql
#/usr/sbin/groupadd?mysql
#useradd?-g?mysql?mysql
#/usr/sbin/useradd?-g?mysql?mysql
#?創(chuàng)建MySQL的相關(guān)目錄
function?create_mysql_dir()
{
????cd?$MYSQL_DATA_DIR
????mkdir?conf?data??logs??slow_logs??bin_logs??mysql_temp
????chmod?750??$MYSQL_DATA_DIR
????#對目錄進行授權(quán)
????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()
{
????#?設(shè)置環(huán)境變量
????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
????
????#?創(chuàng)建軟連接
????local?MYSQL_MEDIA_DIR=$(basename?${MYSQL_INSTALLER}?'.tar.xz')
????#echo??$MYSQL_MEDIA_DIR
????ln?-s?$MYSQL_BASE_DIR/$MYSQL_MEDIA_DIR??$MYSQL_BASE_DIR/mysql8.0
????if?[?$??-ne?0?];then
????????log_error?"create?the?mysql?soft?link?failed,?please?check?it"
????????exit?1
????else
????????log_info?"create?the?mysql?soft?link?success,mysql?auto?install?continue..."
????fi
????
????
????#??初始化MySQL
????cd?$MYSQL_BASE_DIR/mysql8.0
????$MYSQL_BASE_DIR/mysql8.0/bin/mysqld?\
????--defaults-file=$MYSQL_DATA_DIR/conf/my.cnf?\
????--initialize?\
????--basedir=$MYSQL_BASE_DIR/mysql8.0?\
????--datadir=$MYSQL_DATA_DIR/data??2>&1?|?>>?$MYSQL_INSTALL_LOG
????
????#
????$MYSQL_BASE_DIR/mysql8.0/bin/mysql_ssl_rsa_setup?--datadir=$MYSQL_DATA_DIR/data
}
function?mysql_startup()
{
????$MYSQL_BASE_DIR/mysql8.0/bin/mysqld_safe?--defaults-file=$MYSQL_DATA_DIR/conf/my.cnf?&
????
????#?休眠幾秒,等待MySQL服務(wù)啟動
????sleep?15
????
????#?檢查MySQL服務(wù)是否啟動成功
????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?did?not?start.?please?check?it"
????????exit?1
????else
????????log_info?"MySQL?start?success,mysql?auto?install?continue..."
????fi
}
#?修改MySQL的root用戶密碼
function?change_mysql_root_pwd()
{
????#?獲取root初始密碼
????mysql_root_init_passd=`grep?"temporary?password"?$MYSQL_DATA_DIR/logs/mysql_error.log?|awk?'{print?$NF}'`
????
????#?修改MySQL的root密碼
????mysql?-uroot?-p"$mysql_root_init_passd"?--connect-expired-password?<?$SQL_ALTER_USER_PWD?2>?/dev/null
????
????if?[?$??-ne?0?];then
????????log_error?'fail?to?perform?MySQL?operation!!!'
????????exit?1
????else
????????log_info?"alter?the?mysql?user?root's?password?succeed!"
????fi
}
#?MySQL的安全設(shè)置,此腳本在mysql用戶下運行,默認這些文件的屬主為mysql
function?mysql_security_setting
{
????#注意,此處寫死m(xù)ysql_error.log,是因為my.cnf模板中命名統(tǒng)一規(guī)范
????chmod?660??$MYSQL_DATA_DIR/logs/mysql_error.log
????#注意,此處寫死m(xù)ysql_binlog.*,是因為my.cnf模板中命名統(tǒng)一規(guī)范
????chmod?600?$MYSQL_DATA_DIR/bin_logs/mysql_binlog.*
????chmod?400?$MYSQL_DATA_DIR/data/*.pem
????#注意,此處寫死m(xù)ysql_slow.log,是因為my.cnf模板中命名統(tǒng)一規(guī)范
????chmod?660?$MYSQL_DATA_DIR/slow_logs/mysql_slow.log
????#plugin_dir的權(quán)限設(shè)置
????chmod?550?$MYSQL_BASE_DIR/mysql8.0/lib/plugin/?
}
function?main()?{
????????check_env_setting
????????create_mysql_dir
????????mysql_cnf_setting
????????mysql_env_setting
????????mysql_install
????????mysql_startup
????????change_mysql_root_pwd
????
????????if?[?$??-ne?0?];then
????????????log_error?"change_mysql_root_pwd?run?failed!"
????????else????
????????????log_info?"the?mysql?auto?install?was?successful!"
????????fi
????????mysql_security_setting
}
#?invoke?main?function
main?
下面是安裝測試過程的截圖


下面是安裝日志mysql_install.log的輸出信息截圖:

到此這篇關(guān)于MySQL自動安裝腳本代碼實例分享的文章就介紹到這了,更多相關(guān)MySQL自動安裝腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL自動安裝批處理腳本實例代碼
- 詳解docker?制作mysql鏡像并自動安裝腳本
- mysql8.0.14.zip安裝時自動創(chuàng)建data文件夾失敗服務(wù)無法啟動
- Linux下mysql5.6.24(二進制)自動安裝腳本
- 生產(chǎn)庫自動化MySQL5.6安裝部署詳細教程
- MySQL的源碼安裝及使用UDFs進行數(shù)據(jù)自動更新的教程
- mysql一鍵安裝教程 mysql5.1.45全自動安裝(編譯安裝)
- 集群運維自動化工具ansible使用playbook安裝mysql
- 分享MySQL的自動化安裝部署的方法
- mysql自動化安裝腳本(ubuntu and centos64)
相關(guān)文章
ERROR: Error in Log_event::read_log_event()
ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 22014-02-02
Centos7下安裝MySQL8.0.23的步驟(小白入門級別)
這篇文章主要介紹了Centos7下安裝MySQL8.0.23的步驟(小白入門級別),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
mysql重裝后出現(xiàn)亂碼解決辦法:只能在配置文件中將database 和 server 字符集 設(shè)置為utf8 ,否則不起作用,具體如下感興趣的朋友可以參考下哈,希望對大家有所幫助2013-07-07

