MySQL安全管理香追、數(shù)據(jù)庫維護及改善性能

一、安全管理
1坦胶、訪問控制

MySQL服務器的安全基礎:用戶對他們需要的數(shù)據(jù)有適當?shù)脑L問權透典。

訪問控制:給用戶所需的權限且僅提供所需的訪問權。它需要創(chuàng)建和管理用戶賬號顿苇。

PS:嚴肅對待root登陸的使用峭咒,僅在絕對需要時使用它。日常的MySQL操作中纪岁,不應該使用root凑队。

2、管理用戶(下面3點)

MySQL用戶賬號和信息存儲在名為mysql的MySQL數(shù)據(jù)庫中幔翰。

一般不需要直接訪問漩氨,但有時需要直接訪問(如需要獲得所有用戶賬號列表),代碼如下:

USE mysql;

select user from user;

PS:mysql數(shù)據(jù)庫中有個user表导匣,它包含所有用戶賬號才菠;user表有個名為user的列,它存儲用戶登錄名贡定。

3赋访、用戶賬號

A、創(chuàng)建用戶賬號:

create user ben identified by 'p@$$wOrd';

create user創(chuàng)建一個新用戶賬號缓待。identified by用來指定口令蚓耽,它指定的口令為純文本,MySQL將在保存到user表之前對其進行加密旋炒;為了作為散列值指定口令步悠。

PS:創(chuàng)建用戶賬號時不一定需要口令。

grant和insert into的區(qū)別:

grant也可以用來創(chuàng)建用戶賬號瘫镇,但一般來說使用create user是最清楚和簡單的鼎兽;

也可通過插入行到user表來增加用戶,但為安全起見铣除,不建議這么做谚咬。MySQL用來存儲用戶賬號信息的表極為重要,因此相對于直接處理尚粘,使用標記和函數(shù)來處理這些表更好择卦。

B、重新命名用戶賬號:

rename user ben to bforta;

C、刪除用戶賬號:

刪除用戶賬號(以及相關的權限)秉继,使用drop user語句祈噪,如下:

drop user bforta;

4、設置訪問權限

創(chuàng)建用戶賬號后尚辑,必須分配訪問權限辑鲤。新建的用戶賬號沒有任何訪問權限,可以登錄但無法讀寫腌巾;

1遂填、查看某賬號權限:show grants for bforta@%;

結(jié)果為:grant usage on crashcourse.* to bforta; 權限USAGE ON .表示在任意數(shù)據(jù)庫和任意表上對任何東西沒有權限铲觉。

MySQL的權限用:用戶名和主機名結(jié)合定義user@host澈蝙,如果不指定主機名,則使用默認主機名%(授予用戶訪問權限而不管主機名)撵幽。

2灯荧、設置權限使用grants時,要求至少給出以下信息:1要授予的權限盐杂;2被授予訪問權限的數(shù)據(jù)庫或表逗载;3用戶名。

grant select on crashcourse.* to bforta;

此grant允許用戶在crashcourse.*(crashcourse數(shù)據(jù)庫的所有表)上使用select链烈,用戶bforta對crashcourse數(shù)據(jù)庫中所有數(shù)據(jù)擁有只讀權限厉斟。

每個grant添加(更新)用戶的一個權限,MySQL讀取所有授權强衡,并根據(jù)它們確定權限擦秽。

3、grant的反操作為revoke漩勤,用它撤銷特定的權限感挥,例如:

revoke select on crashcourse.* from bforta;

這條revoke語句取消上面的賦予用戶的select權限;被撤銷的權限必須存在越败,否則會出錯触幼。

PS:grant和revoke可在以下幾個層次上控制訪問權限:

·整個服務器,使用grant all和revoke all;

·整個數(shù)據(jù)庫究飞,使用on database.*;

·特定的表置谦,使用on database.table;

·特定的列;

·特定的存儲過程;

可授予或撤銷的MySQL權限,請自行查看文檔亿傅;

4媒峡、使用grant和revoke時,用戶賬號必須存在袱蜡,但對所涉及的對象沒有這個要求丝蹭。

好處:允許管理員在創(chuàng)建數(shù)據(jù)庫和表之前設計和實現(xiàn)安全措施;

缺點:當某個數(shù)據(jù)庫或表被刪除時,相關訪問權限仍然存在奔穿,且如果將來重新創(chuàng)建數(shù)據(jù)庫或表時镜沽,這些權限仍然起作用。

簡化多次授權:通過列出各權限并用逗號分隔贱田,將多余的grant語句串聯(lián)缅茉,如下所示:

grant select,insert on crashcourse.* to bforta;

5、更改口令

1男摧、更改用戶口令蔬墩,可使用set password語句,新口令必須如下加密:

set password for bforta = password('n3w p@$$w0rd');

set password更新用戶口令耗拓,新口令必須傳到password()函數(shù)進行加密拇颅。

2、set password還可以設置自己的口令乔询,比如:

set password = password('n3w p@$$w0rd');

PS:不指定用戶名時樟插,set password更新當前登錄用戶的口令。

二竿刁、數(shù)據(jù)庫維護
1黄锤、備份數(shù)據(jù)

由于MySQL數(shù)據(jù)庫基于磁盤文件,普通的備份系統(tǒng)和例程就能備份MySQL數(shù)據(jù)食拜,但由于這些文件總是處于打開和使用狀態(tài)鸵熟,普通的文件副本備份不一定有效。

可行的解決方案:

A负甸、使用命令行實用程序mysqldump轉(zhuǎn)儲所有數(shù)據(jù)庫內(nèi)容到某個外部文件流强;在進行常規(guī)備份前該程序應該正常運行,以便能正確備份轉(zhuǎn)儲文件惑惶;

B煮盼、使用命令行實用程序mysqlhotcopy從一個數(shù)據(jù)庫復制所有數(shù)據(jù)(并非所有數(shù)據(jù)庫引擎都支持該程序);

C带污、使用MySQL的backup table或select into outfile轉(zhuǎn)儲所有數(shù)據(jù)到某個外部文件僵控;這兩條語句都接受將要創(chuàng)建的系統(tǒng)文件名,此系統(tǒng)文件必須不存在鱼冀,否則會報錯报破。數(shù)據(jù)可用restoretable來復原。

PS:為保證所有數(shù)據(jù)被寫入磁盤(包括索引數(shù)據(jù))千绪,需要在備份前使用flush tables語句充易,刷新未寫數(shù)據(jù)。

2荸型、進行數(shù)據(jù)庫維護

MySQL提供了一系列的語句盹靴,可用來保證數(shù)據(jù)庫正確和正常運行,如下:

1、analyze table orders;

此語句用來檢查表鍵是否正確稿静。

2梭冠、check table orders,orderitems;

check table用來針對許多問題進行檢查,在MyISAM表上還對索引進行檢查改备。check table支持一系列的用語MyISAM表的方式控漠,如下:

changed檢查自最后一次檢查以來改動過的表;

extended執(zhí)行最徹底的檢查悬钳;fast只檢查未正常關閉的表盐捷;

medium檢查所有被刪除的鏈接并進行鍵檢驗;

quick只進行快速掃描默勾。

3碉渡、optimize table orders;

當從一個表刪除大量數(shù)據(jù),使用此語句來收回所用的空間灾测,從而優(yōu)化表的性能爆价。

3、診斷啟動問題

服務器啟動問題通常在對MySQL配置或服務器本身進行更改時出現(xiàn)媳搪,MySQL在這個問題發(fā)生時報告錯誤,但由于多數(shù)MySQL服務器是作 為系統(tǒng)進程或服務自動啟動的骤宣,這些消息可能看不到秦爆。

在排除系統(tǒng)啟動問題時,首先應盡量手動啟動服務器憔披;MySQL服務器自身通過在命令行上執(zhí)行mysqld啟動等限。下面是幾個重要的mysqld 命令行選項:

  • -help顯示幫助(一個選項列表);

  • -safe-mode裝載減去某些最佳配置的服務器芬膝;

  • -verbose顯示全文本消息(為獲得更詳細的幫助消息與- -help聯(lián)合使用)望门;

  • -version顯示版本信息然后退出。

4锰霜、查看日志文件

MySQL管理員依賴的一系列日志文件筹误,主要的日志文件如下:

1、錯誤日志:包含啟動和關閉問題以及任意關鍵錯誤的細節(jié)癣缅。此日志通常名為hostname.err厨剪,位于data目錄中;此日志名可用- -log-error命令行選項更改友存;

2祷膳、查詢?nèi)罩荆河涗浰械膍ysql活動,診斷問題時非常有用屡立;可能會很快地變得非常大直晨,因此不應長時間使用它;日志名通常為hostname.log,位于data目錄中勇皇,此名字可用- -log命令行選項更改奕巍;

3、二進制日志:記錄更新過數(shù)據(jù)的所有語句儒士。通常名為hostname-bin的止,位于data目錄內(nèi),此名字可用- -log-bin命令行選項修改着撩;

4诅福、緩慢查詢?nèi)罩荆河涗泩?zhí)行緩慢的任何查詢。在確定數(shù)據(jù)庫何處需要優(yōu)化很有用拖叙,通常名為hostname-slow.log氓润,位于data目錄中,可使用- -log-slow-querier命令行更改薯鳍。

PS:使用日志時咖气,可使用flush logs語句來刷新和重新開始所有日志文件。

三挖滤、改善性能
改善數(shù)據(jù)庫性能需要知道的一些關鍵點:

1崩溪、關鍵的生產(chǎn)DBMS應該運行在自己專用的服務器上;

2斩松、MySQL是用一系列默認設置預先配置的伶唯,但后期可能需要調(diào)整內(nèi)存分配、緩沖區(qū)大小等惧盹;(為查看當前設置乳幸,可使用SHOW VARIABLES;和SHOW STATUS;)

3、MySQL是一個多用戶多線程的DBMS钧椰,經(jīng)常同時執(zhí)行多個任務粹断。如果這些任務中某個執(zhí)行緩慢,則所有請求都會執(zhí)行緩慢嫡霞,如果遇到顯著的性能不良瓶埋,可使用show processlist顯示所有活動進程(以及它們的線程ID和執(zhí)行時間,還可以用kill命令終結(jié)某個特定進程)秒际;

4悬赏、編寫同一條select語句的方法很多,應多嘗試聯(lián)結(jié)娄徊、并闽颇、子查詢等,找出最佳方法寄锐;

5兵多、使用explain語句讓MySQL解釋它將如何執(zhí)行一條select語句尖啡;

6、一般情況下剩膘,存儲過程執(zhí)行的比一條一條的執(zhí)行其中的各條MySQL語句要快衅斩;

7、總是使用正確的數(shù)據(jù)類型怠褐;

8畏梆、絕不要檢索比需要的還多的數(shù)據(jù),即:不要使用select *(除非真正需要)奈懒;

9奠涌、有的操作(包括insert)支持一個可選的delayed關鍵字,如果使用它磷杏,將把控制立即返回給調(diào)用程序溜畅,并且一旦有可能就實際執(zhí)行該操作;

10极祸、導入數(shù)據(jù)時慈格,應關閉自動提交;

11遥金、必須索引數(shù)據(jù)庫表以改善數(shù)據(jù)庫性能浴捆,分析使用select語句以找出重復的where和order by子句(如果一個簡單的where子句返回結(jié)果花費時間過長,則可以斷定其中使用的列就是需要索引的對象)

12汰规、SELECT語句中有一系列復雜的OR條件汤功,可使用多條select語句和連接它們的union語句,可以極大的改善性能溜哮;

13、索引改善數(shù)據(jù)檢索的性能色解,但損害數(shù)據(jù)插入茂嗓、刪除和更新的性能。如果有些表收集數(shù)據(jù)但不經(jīng)常被搜索科阎,則在有必要之前不要索引它們(索引可根據(jù)需要添加和刪除)述吸;

14、like很慢锣笨,一般建議使用fulltext蝌矛;

15、數(shù)據(jù)庫是不斷變化的實體错英;一組優(yōu)化良好的表一會兒后可能就面 目全非了

16入撒、最重要的規(guī)則:每條規(guī)則在某些條件下都會被打破。

image

最新2020整理收集的一些高頻面試題(都整理成文檔)椭岩,有很多干貨茅逮,包含mysql璃赡,netty,spring献雅,線程碉考,spring cloud、jvm挺身、源碼侯谁、算法等詳細講解,也有詳細的學習規(guī)劃圖章钾,面試題整理等墙贱,需要獲取這些內(nèi)容的朋友請加Q君樣:909038429
/./*歡迎加入java交流Q君樣:909038429一起吹水聊天

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市伍玖,隨后出現(xiàn)的幾起案子嫩痰,更是在濱河造成了極大的恐慌,老刑警劉巖窍箍,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件串纺,死亡現(xiàn)場離奇詭異,居然都是意外死亡椰棘,警方通過查閱死者的電腦和手機纺棺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邪狞,“玉大人祷蝌,你說我怎么就攤上這事》浚” “怎么了巨朦?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剑令。 經(jīng)常有香客問我糊啡,道長,這世上最難降的妖魔是什么吁津? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任棚蓄,我火速辦了婚禮,結(jié)果婚禮上碍脏,老公的妹妹穿的比我還像新娘梭依。我一直安慰自己,他們只是感情好典尾,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布役拴。 她就那樣靜靜地躺著,像睡著了一般急黎。 火紅的嫁衣襯著肌膚如雪扎狱。 梳的紋絲不亂的頭發(fā)上侧到,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音淤击,去河邊找鬼匠抗。 笑死,一個胖子當著我的面吹牛污抬,可吹牛的內(nèi)容都是我干的汞贸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼印机,長吁一口氣:“原來是場噩夢啊……” “哼矢腻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起射赛,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤多柑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后楣责,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竣灌,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年秆麸,在試婚紗的時候發(fā)現(xiàn)自己被綠了初嘹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡沮趣,死狀恐怖屯烦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情房铭,我是刑警寧澤驻龟,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站缸匪,受9級特大地震影響迅脐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜豪嗽,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豌骏。 院中可真熱鬧龟梦,春花似錦、人聲如沸窃躲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒂窒。三九已至躁倒,卻和暖如春荞怒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秧秉。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工褐桌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人象迎。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓荧嵌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砾淌。 傳聞我的和親對象是個殘疾皇子啦撮,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容