MySQL常用工具選擇和建議
有句話說(shuō),工欲善其事,必先利其器,在MySQL方向尤其如此。
技術(shù)規(guī)劃的時(shí)候,會(huì)發(fā)現(xiàn)有一些事情需要前置,比如說(shuō)MySQL里面的工具,如果等到實(shí)際碰到了各色的問(wèn)題再來(lái)統(tǒng)一,就比較難了。有溝通成本,人力成本,技術(shù)沉淀和持續(xù)交付等等的成本,這些***提前和團(tuán)隊(duì)有一個(gè)基本的溝通,達(dá)成一個(gè)共識(shí)。內(nèi)部統(tǒng)一了以后,和開(kāi)發(fā)同學(xué)規(guī)范統(tǒng)一就有了一個(gè)基線。
大體來(lái)說(shuō),我考慮了以下幾個(gè)方面的工具:
- 運(yùn)維管理工具
- 數(shù)據(jù)備份恢復(fù)工具
- 數(shù)據(jù)庫(kù)優(yōu)化工具
- 客戶端工具
- 性能測(cè)試工具
- 數(shù)據(jù)庫(kù)版本管理工具
- 數(shù)據(jù)庫(kù)審計(jì)工具
1. 運(yùn)維管理工具
要說(shuō)MySQL運(yùn)維工具,當(dāng)仁不讓Percona-toolkit,它應(yīng)該是我們學(xué)習(xí)MySQL需要熟練使用的一個(gè)運(yùn)維工具。
Percona-tooolkit通常簡(jiǎn)稱(chēng)為pt工具,pt工具其實(shí)是工具M(jìn)aatkit 和Aspersa的組合,它們都出自同一個(gè)作者:Baron Schwartz;其中,Maatkit工具更偏重于數(shù)據(jù)庫(kù)層面,最開(kāi)始就是Perl的基因。而Aspersa的范疇更傾向于系統(tǒng)層面,比如磁盤(pán)信息等。
在2017年開(kāi)始進(jìn)入了3.0時(shí)代,所以線上使用的版本幾乎都是2.2(自2013年),距今已經(jīng)跨越了好幾個(gè)年頭。 pt工具被Percona收至麾下,有專(zhuān)門(mén)的項(xiàng)目維護(hù),
2. 數(shù)據(jù)備份恢復(fù)工具
在數(shù)據(jù)備份和恢復(fù)方面,主要依據(jù)是邏輯備份和物理備份,行業(yè)里主要有以下的一些備份工具:
(1) mysqldump,MySQL最經(jīng)典的邏輯備份工具,也是MySQL工具集里默認(rèn)的工具,適用于一些數(shù)據(jù)量不大的數(shù)據(jù)備份工作。值得一提的是Facebook的生產(chǎn)環(huán)境都是使用mysqldump進(jìn)行邏輯備份。
(2) mysqlpump ,MySQL新版本推出的備份工具,但是效果沒(méi)有想象的那么好,***的一個(gè)痛點(diǎn)應(yīng)該就是備份的IO問(wèn)題還是沒(méi)法大幅度擴(kuò)展,因?yàn)槎荚?**備份出來(lái)的那個(gè)文件上,沒(méi)有拆分。
(3) mydumper,這個(gè)工具還算比價(jià)流行,能夠?qū)υ瓉?lái)的mysqldump做一個(gè)很好的補(bǔ)充。騰訊云就是定制了mydumper來(lái)做為默認(rèn)的備份工具.
另外和Mydumper配套的工具是myloader,作為數(shù)據(jù)的批量導(dǎo)入工具。
(4) Xtrabackup,來(lái)自Percona的工具,擅長(zhǎng)做物理備份,而且更傾向于是全備+增備結(jié)合的方式。
3 數(shù)據(jù)庫(kù)優(yōu)化工具
(1)innotop
這是一款用Perl所寫(xiě)的MySQL監(jiān)控工具,可以命令行模式調(diào)用展示MySQL服務(wù)器和InnoDB的運(yùn)行狀況,下載地址為:https://github.com/innotop/innotop
目前Github上提供了兩種版本,一種是開(kāi)發(fā)版(innotop-master),一種是穩(wěn)定版(innotop-gtid),推薦使用穩(wěn)定版,使用截圖如下:
(2)orzdba
orzdba是淘寶DBA團(tuán)隊(duì)開(kāi)發(fā)出來(lái)的一個(gè)Perl監(jiān)控腳本,可以監(jiān)控mysql數(shù)據(jù)庫(kù),也有一些磁盤(pán)和cpu的監(jiān)控。使用截圖如下:
(3)mytop
這是一款類(lèi)似 Linux 下的 top 命令風(fēng)格的 MySQL 監(jiān)控工具,可以監(jiān)控當(dāng)前的連接 用戶和正在執(zhí)行的命令。
(4)orztop
這是一款可以查看MySQL數(shù)據(jù)庫(kù)實(shí)時(shí)運(yùn)行的SQL狀況的工具,如果你習(xí)慣于用show processlist/show full processlist抓取SQL,這款工具就是一個(gè)很好的補(bǔ)充。
(5)systemtap,是Linux下的動(dòng)態(tài)跟蹤工具,可以監(jiān)控、跟蹤運(yùn)行中的程序或Linux內(nèi)核操作,它帶來(lái)的性能損耗很小,在一些特定的場(chǎng)景下可以編寫(xiě)SystemTap腳本來(lái)調(diào)試一些性能問(wèn)題。
4 操作系統(tǒng)監(jiān)控
(1) nmon,(Nigel’s Monitor)是由IBM 提供、免費(fèi)監(jiān)控 AIX 系統(tǒng)與 Linux 系統(tǒng)資源的工具,在系統(tǒng)數(shù)據(jù)采集方面使用廣泛。
歷史數(shù)據(jù)
(2) Mpstat ,Multiprocessor Statistics的縮寫(xiě),是實(shí)時(shí)監(jiān)控工具,mpstat***的特點(diǎn)是:可以查看多核心的cpu中每個(gè)CPU的統(tǒng)計(jì)數(shù)據(jù)
5 慢日志分析工具
(1)mysqldumpslow
這是MySQL產(chǎn)品包中的一個(gè)原生命令工具,它可以支持慢查詢的統(tǒng)計(jì)分析,對(duì)MySQL查詢語(yǔ)句的監(jiān)控、分析、優(yōu)化是MySQL優(yōu)化是一個(gè)開(kāi)始,相對(duì)來(lái)說(shuō),功能支持比較少。
(2)pt-query-digest
經(jīng)典的慢日志分析工具,屬于pt工具的一個(gè)子集。它基于Perl開(kāi)發(fā),與mysqldumpshow工具相比,py-query_digest 工具的分析結(jié)果更具體,更完善。
(3)mysqlsla
該工具是是daniel-nichter 用Perl 寫(xiě)的一個(gè)腳本,mysqlsla與pt-query-digest的作者是同一個(gè)人,現(xiàn)在是主打pt系列工具,現(xiàn)在已經(jīng)不再維護(hù)了。
(4)Anemometer
一個(gè)圖形化顯示從MySQL慢日志的開(kāi)源項(xiàng)目,基于php開(kāi)發(fā),充分結(jié)合了pt-query-digest,Anemometer可以很輕松的去分析慢查詢?nèi)罩?,找到哪些SQL需要優(yōu)化。
6 客戶端工具
(1)SQLyog
SQLyog 是一個(gè)快速而簡(jiǎn)潔的圖形化管理MySQL數(shù)據(jù)庫(kù)的工具,由業(yè)界著名的Webyog公司出品,屬于付費(fèi)產(chǎn)品。
(2)Navicat
是一套快速、可靠并價(jià)格適當(dāng)?shù)臄?shù)據(jù)庫(kù)管理工具,專(zhuān)為簡(jiǎn)化數(shù)據(jù)庫(kù)的管理及降低系統(tǒng)管理成本而設(shè)計(jì),它的設(shè)計(jì)符合數(shù)據(jù)庫(kù)管理員、開(kāi)發(fā)人員及中小企業(yè)的需要,屬于付費(fèi)產(chǎn)品。
(3)MySQL Workbench
為MySQL設(shè)計(jì)的ER/數(shù)據(jù)庫(kù)建模工具,可以支持?jǐn)?shù)據(jù)庫(kù)管理,數(shù)據(jù)遷移,數(shù)據(jù)建模等功能,它同時(shí)有開(kāi)源和商業(yè)化的兩個(gè)版本。
(4)SQL developer
這個(gè)工具是Oracle推出的一款免費(fèi)的數(shù)據(jù)庫(kù)管理工具,它主要支持Oracle,如果需要支持MySQL,需要額外下載一個(gè)驅(qū)動(dòng)包即可使用。
7 性能監(jiān)控工具
(1)Zabbix,一個(gè)基于WEB界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)的開(kāi)源解決方案,集監(jiān)控報(bào)警于一身的強(qiáng)大功能,在互聯(lián)網(wǎng)行業(yè)使用比例很高。
(2)Lepus
天兔是國(guó)內(nèi)的一位DBA開(kāi)發(fā)的一款開(kāi)源的,基于php開(kāi)發(fā)的數(shù)據(jù)庫(kù)監(jiān)控管理系統(tǒng),可以對(duì)數(shù)據(jù)庫(kù)的實(shí)時(shí)健康和各種性能指標(biāo)進(jìn)行全方位的監(jiān)控,它本身可以支持MySQL、Oracle、MongoDB、Redis數(shù)據(jù)庫(kù)的監(jiān)控,在慢日志的功能設(shè)計(jì)方面很有亮點(diǎn)。
(3)mysql-statsd,一個(gè)收集 MySQL 信息的 Python 守護(hù)進(jìn)程。并通過(guò) StatsD 發(fā)送到 Graphite
8 性能測(cè)試工具
業(yè)務(wù)上線,環(huán)境初始化需要做烤機(jī)測(cè)試。主要就是讓服務(wù)器先吃點(diǎn)苦頭,看能不能經(jīng)受住考驗(yàn)。在一定的測(cè)試之后,我們可以得到壓測(cè)的數(shù)據(jù)結(jié)果,作為后續(xù)上線的基準(zhǔn)參考。
行業(yè)里主要的性能測(cè)試工具有以下幾類(lèi):
(1) Sysbench,是一款主流的性能測(cè)試工具,本身是開(kāi)源的,具備多線程壓測(cè)能力,覆蓋硬件和軟件層面,產(chǎn)品隸屬于Percona
(2) tpcc-mysql,是Percona按照TPC-C開(kāi)發(fā)的產(chǎn)品,主要用于MySQL的壓測(cè)工具
(3) Mydbtest,該工具是有知名數(shù)據(jù)庫(kù)專(zhuān)家樓方鑫先生開(kāi)發(fā),免安裝,上手快,可以針對(duì)業(yè)務(wù)做定制化壓測(cè)。
(4) mysqlslap,mysql自帶的基準(zhǔn)測(cè)試工具,自5.1.4版開(kāi)始推出,可以通過(guò)模擬多個(gè)并發(fā)客戶端訪問(wèn)MySQL來(lái)執(zhí)行壓力測(cè)試
9 數(shù)據(jù)庫(kù)版本管理工具
liquibase,一個(gè)數(shù)據(jù)庫(kù)重構(gòu)和遷移的開(kāi)源工具,通過(guò)日志文件的形式記錄數(shù)據(jù)庫(kù)的變更,目前日志文件支持多種格式,如XML, YAML, JSON, SQL等
10 MySQL審計(jì)
數(shù)據(jù)庫(kù)審計(jì)是數(shù)據(jù)安全方面的一個(gè)重要參考,一個(gè)數(shù)據(jù)庫(kù)活動(dòng),對(duì)數(shù)據(jù)庫(kù)操作進(jìn)行細(xì)粒度審計(jì)的合規(guī)性管理,對(duì)數(shù)據(jù)庫(kù)遭受到的風(fēng)險(xiǎn)行為進(jìn)行告警,是借助于審核工具希望能夠感知的。
目前在MySQL審計(jì)方向主要存在以下幾類(lèi)審計(jì)插件:
(1) 官方的商業(yè)版插件
(2) Percona Audit Log插件
(3) MariaDB 插件
初步結(jié)論:
(1) 運(yùn)維管理工具主要考慮Percona-toolkit,作為默認(rèn)的初始化軟件使用
(2) 數(shù)據(jù)備份恢復(fù)工具目前還是已現(xiàn)有的備份恢復(fù)體系為主,采用xtrabackup和mysqldump結(jié)合的方式。
- xtrabackup通過(guò)物理備份,每日全備,保留7天備份集,版本建議為2.4.8
- mysqldump備份數(shù)據(jù)字典庫(kù),比如mysql,每日全備,保留7天備份集。
在這個(gè)基礎(chǔ)上在每個(gè)機(jī)房再申請(qǐng)一臺(tái)binlog備份機(jī),通過(guò)xtrabackup每日全備,binlog備份,保留3天,達(dá)到基本的數(shù)據(jù)恢復(fù)需求。
注: mydumper和myloader的適用場(chǎng)景也比較廣,可以作為一些備份恢復(fù)方案或者遷移的的改進(jìn)。
(3) MySQL實(shí)時(shí)狀態(tài)分析工具使用orzdba和orztop,其中orzdba的內(nèi)容可以通過(guò)自行定制mysqladmin來(lái)滿足需求,orztop可以作為環(huán)境初始化的軟件。
(4) 操作系統(tǒng)監(jiān)控工具使用nmon收集歷史數(shù)據(jù),mpstat得到實(shí)時(shí)的系統(tǒng)監(jiān)控?cái)?shù)據(jù),需要向系統(tǒng)部提需求定制。
(5) 慢日志分析工具使用pt-query-digest,需要調(diào)研從Lepus中抽取出慢日志的邏輯單獨(dú)調(diào)用。日志系統(tǒng)的部分需要和馳騁進(jìn)一步溝通。
(6) 客戶端工具使用workbench,推薦開(kāi)發(fā)同學(xué)使用workbench,需要內(nèi)部整理出操作文檔
(7) 性能測(cè)試工具主要使用sysbench在業(yè)務(wù)上線,環(huán)境初始化中做拷機(jī)測(cè)試,壓測(cè)硬件(IO,CPU,MEM)等,壓測(cè)MySQL,歷時(shí)至少一周。在這個(gè)基礎(chǔ)上使用tpcc-mysql,mydbtest做輔助測(cè)試。主要目標(biāo)是通過(guò)壓測(cè)的部分得到一些關(guān)鍵的參考指標(biāo)(IOPS,TPS,QPS)等。
(8) MySQL審計(jì)工具使用建議選定Percona的審計(jì)插件Audit Log和MariaDB的Server Audit,目前定位為DDL敏感,root用戶敏感,根據(jù)后期的測(cè)試,MariaDB的Server Audit插件功能全面,優(yōu)先選用。