李燦 孫東平
摘要:隨著互聯(lián)網(wǎng)時(shí)代的到來,越來越多的應(yīng)用采用了MySQL作為應(yīng)用的后臺(tái)數(shù)據(jù)庫(kù)。MySQL的供應(yīng)商免費(fèi)提供各種開源版本,其中Linux版本的安裝包不提供可視化的安裝界面,需要用戶手動(dòng)解壓并修改配置,十分煩瑣并且耗時(shí)。本文提供一種快速部署MySQL的方法,使用Shell安裝腳本達(dá)到一鍵安裝和升級(jí)數(shù)據(jù)庫(kù)的目的,該方法可以大大節(jié)約用戶部署數(shù)據(jù)庫(kù)的時(shí)間,也減少誤操作引起的數(shù)據(jù)庫(kù)啟動(dòng)異常等問題。
關(guān)鍵詞:MySQL;一鍵安裝;升級(jí);Shell腳本
中圖分類號(hào):TP183 文獻(xiàn)識(shí)別碼:A
文章編號(hào):1009-3044(2020)33-0033-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
MySQL數(shù)據(jù)庫(kù)是Oracle公司研發(fā)的一款關(guān)系型數(shù)據(jù)庫(kù),由于體積小,速度快,支持多種操作系統(tǒng),同時(shí)又免費(fèi)開源,具有良好的生態(tài)圈,一直以來備受各中小型互聯(lián)網(wǎng)公司的青睞。MySQL數(shù)據(jù)庫(kù)目前已經(jīng)成為開源應(yīng)用中最大的關(guān)系型數(shù)據(jù)庫(kù),海量的應(yīng)用將數(shù)據(jù)存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中,由于承擔(dān)著數(shù)據(jù)的安全性和可靠性的職責(zé),學(xué)習(xí)和研究MySQL數(shù)據(jù)庫(kù)技術(shù)顯得尤為重要。
所有基于MySQL數(shù)據(jù)庫(kù)的性能測(cè)試以及應(yīng)用都必須首先完成MySQL環(huán)境的搭建和部署,安裝部署MySQL或升級(jí)新版本MySQL在研發(fā)和測(cè)試的工作中被頻繁使用。因此提高安裝部署的效率顯得非常重要。
本文將通過研究MySQL數(shù)據(jù)庫(kù)的安裝部署,提出一種快速部署和升級(jí)MySQL數(shù)據(jù)庫(kù)的方法。
2 通常的安裝方式
MySQL數(shù)據(jù)庫(kù)支持跨平臺(tái)操作,有多個(gè)版本的安裝包,包括Windows版、Unix版、Linux版和Mac OS版等,常用的有Win-dows版和Linux版,其中Windows版提供了可視化的圖形化界面安裝工具,但是開發(fā)常用的Linux版本卻只能依靠手動(dòng)執(zhí)行命令語(yǔ)句來完成安裝部署。通常情況下,Linux系統(tǒng)中MySQL的安裝需要經(jīng)過環(huán)境檢測(cè)、下載、解壓、拷貝、配置以及啟動(dòng)等一系列的動(dòng)作。
①檢測(cè)安裝環(huán)境
[root@localhost/]#rpm -qa l grep mysql
檢查是否安裝過Mysql,如果安裝過,需要?jiǎng)h除安裝包以及相應(yīng)的目錄文件。
②檢查是否已經(jīng)創(chuàng)建mysql用戶和用戶組,如果沒有,需要新建mysql用戶和用戶組。
[root@localhost/]#id mysql
[root@localhost/]#groupadd mysql
[root@localhost/]#useradd—r-g mysql mysql
③下載安裝包
通常為了安全,我們的環(huán)境不能與Internet連通,需要將已經(jīng)下載好的安裝包上傳到服務(wù)器。在允許聯(lián)網(wǎng)的情況下,可以使用wget命令下載安裝包。
[root@localhost/]#, wget https://dev. mysql. com/get/Downloads/MySQL-5.7/mysql-5.7.1
-linux-glibc2.1 2-x86_64.tar.gz
④解壓安裝包
[root@localhost/]# tar xzvf mysql-5.7.1-linux-glibc2.12-x86_64.tar.gz
⑤拷貝可執(zhí)行程序和配置文件模板到相應(yīng)目錄,如果/usr/local/目錄下不存在mysql目錄,可以手動(dòng)創(chuàng)建該目錄
[root@localhost/l# mv mysql-5.7.1-linux-glibc2.12-x86_64/usr/locaVmysql
⑥在/usr/local/mysql目錄下創(chuàng)建data目錄以及etc目錄,Log日志目錄,同時(shí)需改環(huán)境變量文件。
[root@localhost/]#mkdir /usr/local/mysql/data
[root@localhost/]#mkdir /usr/local/mysql/etc
[root@localhost/]#mkdir /usr/local/mysql/log
[root@localhost/]#chown -R mysql:mysql /usr/local/mysql
[root@localhost/]#chmod -R 755 /usr/local/mysql
⑦切換到/usr/local/mysql/bin目錄下,執(zhí)行初始化數(shù)據(jù)庫(kù)命令
[root@localhost bin]# ./mysqld -initialize -user=mysql一一datadir=/usr/loc al/mysql/data -basedir=/usr/loc al/mysql
⑧修改配置文件my.cnf,設(shè)置數(shù)據(jù)文件存放路徑、socket連接以及監(jiān)聽端口,默認(rèn)端口為3306
[root@localhost bin]# vi /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
port= 3306
symbolic-links=0
max_connections=400
innodb_file_per_table=1
⑨啟動(dòng)數(shù)據(jù)庫(kù)
[root@localhost/]#/usr/local/mysql/support-files/mysql.
serv-er start
⑩檢查數(shù)據(jù)庫(kù)進(jìn)程是否啟動(dòng)成功
通過檢查數(shù)據(jù)庫(kù)進(jìn)程號(hào)是否改變,來判定數(shù)據(jù)庫(kù)進(jìn)程是否成功啟動(dòng)。也可以通過日志信息判斷數(shù)據(jù)庫(kù)是否啟動(dòng)成功。登錄連接數(shù)據(jù)庫(kù),執(zhí)行查看數(shù)據(jù)庫(kù)是否正常T作。
由此可見,要完成以上安裝步驟,手動(dòng)執(zhí)行時(shí)間長(zhǎng),容易引入人為操作的失誤,最重要的是手動(dòng)操作不具有可復(fù)制性,由此增加了研發(fā)和測(cè)試人員的工作量,自動(dòng)安裝升級(jí)MySQL就是在這種環(huán)境下應(yīng)運(yùn)而生的。
3 shell腳本關(guān)鍵技術(shù)
Shell腳本語(yǔ)言是一個(gè)用C語(yǔ)言編寫的程序,是操作系統(tǒng)提供給用戶的操作接口。用戶通常使用shell訪問Linux內(nèi)核的服務(wù)。一般shell指的是Shell腳本,也就是將一些Shell的語(yǔ)法與指令寫進(jìn)一個(gè)文本文件,用正則表達(dá)式、管道命令和數(shù)據(jù)流重定向等功能對(duì)數(shù)據(jù)進(jìn)行集中處理。Shell腳本類似于Win-dows下的批處理,可以高效地管理和執(zhí)行命令。
Shell腳本語(yǔ)言的語(yǔ)法和結(jié)構(gòu)相對(duì)于編譯語(yǔ)言比較簡(jiǎn)單,書寫也比較方便,腳本語(yǔ)言可以不經(jīng)過編譯直接運(yùn)行,此外Linux系統(tǒng)為Shell腳本提供了awk,sed等應(yīng)用程序,使得Shell腳本可以更方便快捷的處理實(shí)物[1]。
將手動(dòng)安裝MySQL的每個(gè)步驟的執(zhí)行命令匯集成一個(gè)Shell腳本,可以提高執(zhí)行效率。
改進(jìn)后的白動(dòng)安裝方式:
本文提供的MySQL-鍵安裝就是將手動(dòng)安裝部署MySQL的操作命令放到一個(gè)sh文件中,通過調(diào)用該腳本,可以一次性完成數(shù)據(jù)庫(kù)的安裝配置,并啟動(dòng)數(shù)據(jù)庫(kù)。
一鍵安裝部署腳本的執(zhí)行流程如下圖所示:
首先需要檢查安裝環(huán)境,通過調(diào)用函數(shù)check_env()檢查當(dāng)前Linux環(huán)境下是否已經(jīng)安裝MySQL,同時(shí)檢查當(dāng)前用戶的環(huán)境變量文件,設(shè)置可執(zhí)行文件的執(zhí)行路徑,庫(kù)文件的存放目錄等。
然后執(zhí)行調(diào)用install_mysq()函數(shù),下載tar.gz安裝包,執(zhí)行解壓安裝包命令,需要注意的是,每完成一次關(guān)鍵命令,需要對(duì)命令執(zhí)行是否成功做一次檢測(cè),遇到執(zhí)行異常需要退出程序,并打印日志方便定位故障。依次創(chuàng)建安裝目錄,拷貝文件到執(zhí)行的安裝目錄下,并調(diào)用方法modify_config()修改配置文件,設(shè)置數(shù)據(jù)文件存放路徑和MySQL關(guān)鍵配置項(xiàng)。以上函數(shù)調(diào)用完成后,調(diào)用start_mysql()方法執(zhí)行初始化MySQL命令,并啟動(dòng)MySQL數(shù)據(jù)庫(kù)。在start_mysql()方法中需要獲取啟動(dòng)后的MySQL進(jìn)程的進(jìn)程號(hào),并監(jiān)控該進(jìn)程號(hào)是否發(fā)生變化,如果進(jìn)程號(hào)穩(wěn)定不變,并且啟動(dòng)日志中無報(bào)錯(cuò)字樣,視為數(shù)據(jù)庫(kù)正常啟動(dòng),此時(shí),安裝腳本執(zhí)行完成,退出安裝。反之,如果進(jìn)程號(hào)在幾秒鐘后發(fā)生變化,視為數(shù)據(jù)庫(kù)啟動(dòng)異常,需要停掉數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)安裝腳本輸出啟動(dòng)異常的日志,并退出安裝。
實(shí)踐經(jīng)過和結(jié)果:
本文選擇Linux SUSEll操作系統(tǒng)作為測(cè)試環(huán)境。將m-stall_mysql.sh拷貝到測(cè)試環(huán)境上,通過執(zhí)行./sh install_mysql.sh命令執(zhí)行安裝腳本。
4 結(jié)論對(duì)比
通過實(shí)際安裝調(diào)測(cè)發(fā)現(xiàn),執(zhí)行自動(dòng)化安裝腳本的時(shí)間基本維持在30秒鐘左右,大大縮短了手動(dòng)安裝MySQL的時(shí)間,實(shí)驗(yàn)結(jié)果表明自動(dòng)化安裝腳本提高了安裝效率,并且具有可復(fù)制性,可以反復(fù)多次在同一環(huán)境下執(zhí)行。同樣的方法一樣適用于MySQL數(shù)據(jù)的升級(jí),升級(jí)的本質(zhì)是下載目標(biāo)版本的MySQL安裝包,解壓并覆蓋當(dāng)前版本的可執(zhí)行文件,配置文件。需要注意的是,如果是現(xiàn)網(wǎng)數(shù)據(jù)庫(kù)版本的升級(jí),需要保留原數(shù)據(jù)文件,配置文件以及日志文件,因此升級(jí)數(shù)據(jù)庫(kù)的腳步比安裝腳本要增加備份和還原配置的步驟。
總之,基于shell腳本進(jìn)行部署安裝和升級(jí)MySQL是自動(dòng)化測(cè)試的重要工具,穩(wěn)定高效的腳本文件可以極大地幫助提高工作效率,是自動(dòng)化運(yùn)維的重要研究方向。
參考文獻(xiàn):
[1]閆峻函.基于Shell腳本Solaris操作系統(tǒng)遠(yuǎn)程管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2016.
[2]韓璐.在UNIX系統(tǒng)下用shell編程實(shí)現(xiàn)對(duì)文件的操作[J].中國(guó)科技信息,2006(13):131-132.
[3](美)[D.梅迪納茨]David,Medinets..UNIX Shell編程工具[M].北京:機(jī)械工業(yè)出版社,2000.
[4]唐華.Linux操作系統(tǒng)高級(jí)教程[M].北京:電子工業(yè)出版社,2008.
【通聯(lián)編輯:光文玲】