MySQL自動安裝腳本代碼實(shí)例分享
這里分享一個我寫的MySQL自動安裝腳本mysql_auto_install.sh,它的功能非常簡單,就是自動化安裝MySQL單實(shí)例,讓DBA的工作更簡單、輕松一些,不用去手工安裝MySQL實(shí)例。從簡單重復(fù)的工作中釋放出來。
下面是關(guān)于mysql_auto_install.sh腳本的一些說明:
1:這個腳本運(yùn)行在mysql用戶下(注意,root用戶下運(yùn)行會報(bào)錯,需要修改部分地方),主要原因是因?yàn)镈BA沒有root賬號權(quán)限,只有mysql用戶的權(quán)限。另外,我也寫了一個mysql_auto_install_root.sh腳本,這個腳本是在root用戶下面運(yùn)行,功能更多一些。暫時還在測試當(dāng)中。
2:此腳本運(yùn)行在mysql用戶下,因?yàn)闄?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)過多次測試驗(yàn)證,但是并不保證各種場景都沒有bug。發(fā)現(xiàn)問題,歡迎反饋,我自己也在不斷完善、改進(jì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ù)實(shí)際情況輸入密碼,安裝完成后,刪除此腳本。
ALTER?USER?'root'@'localhost'?IDENTIFIED?BY?'********'; flush?privileges;
mysql_auto_install.sh腳本的詳情如下(格式可能因?yàn)榇a插件展示問題,有所混亂,請自行調(diào)整。原始腳本格式不會有下面亂七八糟的縮進(jìn)或不對齊問題)
#!/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?????????????????????????????????????????????????????????????# #---------------------------------------------------------------------------------------# #?注意事項(xiàng):????????????????????????????????????????????????????????????????????????????# #???1:如果維護(hù)的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用戶下運(yùn)行,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àn)證/優(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ì) #?注意事項(xiàng),如果安裝介質(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實(shí)例) ????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 ???? ????#?驗(yàn)證MySQL安裝介質(zhì)的MD5 ???? ???? ????#?檢查是否存在MySQL實(shí)例 ????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 ????#對目錄進(jìn)行授權(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的二進(jìn)制安裝包 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用戶下運(yùn)行,默認(rèn)這些文件的屬主為mysql function?mysql_security_setting { ????#注意,此處寫死m(xù)ysql_error.log,是因?yàn)閙y.cnf模板中命名統(tǒng)一規(guī)范 ????chmod?660??$MYSQL_DATA_DIR/logs/mysql_error.log ????#注意,此處寫死m(xù)ysql_binlog.*,是因?yàn)閙y.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,是因?yàn)閙y.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自動安裝腳本代碼實(shí)例分享的文章就介紹到這了,更多相關(guān)MySQL自動安裝腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL自動安裝批處理腳本實(shí)例代碼
- 詳解docker?制作mysql鏡像并自動安裝腳本
- mysql8.0.14.zip安裝時自動創(chuàng)建data文件夾失敗服務(wù)無法啟動
- Linux下mysql5.6.24(二進(jìn)制)自動安裝腳本
- 生產(chǎn)庫自動化MySQL5.6安裝部署詳細(xì)教程
- MySQL的源碼安裝及使用UDFs進(jìn)行數(shù)據(jù)自動更新的教程
- mysql一鍵安裝教程 mysql5.1.45全自動安裝(編譯安裝)
- 集群運(yùn)維自動化工具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-02Centos7下安裝MySQL8.0.23的步驟(小白入門級別)
這篇文章主要介紹了Centos7下安裝MySQL8.0.23的步驟(小白入門級別),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
mysql重裝后出現(xiàn)亂碼解決辦法:只能在配置文件中將database 和 server 字符集 設(shè)置為utf8 ,否則不起作用,具體如下感興趣的朋友可以參考下哈,希望對大家有所幫助2013-07-07