Mysql Shell免密登錄的思考及實際應(yīng)用案例

前言

數(shù)據(jù)庫圖形化工具的出現(xiàn)眷唉,給我們操作數(shù)據(jù)庫帶來了許多便利予颤,但是過度的依賴工具,始終無法明白其內(nèi)部 的一些原理冬阳,離開了工具蛤虐,可能寸步難行,所以盡量使用原生的命令行來操作數(shù)據(jù)庫肝陪,可以增加熟練度驳庭,提高我們知識的深度。

最常見的明文登錄方式

以下mysql命令參數(shù),相信大家已經(jīng)是耳熟能詳了:

-h參數(shù)指定mysql主機(jī)饲常。

-u指定mysql用戶蹲堂。

-P(大寫)指定端口。

-p(小寫)指定密碼贝淤。

這里衍生出兩個問題:

1)每次使用都需要指定一長串的參數(shù)和密碼柒竞。

2)密碼直接在命令行暴露出來,運行時播聪,在一個短暫的時間間隔內(nèi)朽基,是可以直接通過ps命令查看到你數(shù)據(jù)庫的密碼的,所以十分不安全离陶。

當(dāng)然你可以不用指定密碼參數(shù)稼虎,而是選擇手動輸入。

file

明文配置文件的方式登錄

如果你不想在控制臺招刨,以交互的方式輸入密碼霎俩,那還有一種方式,將明文密碼寫入到文件中沉眶。

file

當(dāng)然也可以試試驗證讀取配置情況:

mysql --defaults-file=./A.cnf --print-defaults
file

這里打印的意思是:mysql將會使用如下的參數(shù)進(jìn)行登錄連接茸苇。

小結(jié)

總結(jié)來說:指定明文密碼的兩種方式是:

1)通過指定--password (-p) 交互式的輸入密碼。

2)將密碼放在一個配置 文件中沦寂。

當(dāng)我們使用一些數(shù)據(jù)庫的shell腳本時学密,當(dāng)然不能這樣交互式的輸入密碼,并且我們也不想把密碼暴露到配置文件中传藏,那該怎么做呢腻暮?

學(xué)習(xí)mysql命令的參數(shù)配置項

不知道如何實現(xiàn),我們首先來熟悉熟悉mysql命令提供的參數(shù)毯侦。
默認(rèn)情況下哭靖,mysql會按如下順序讀取配置:

1) /etc/my.cnf

2)/etc/mysql/my.cnf

3)~/.my.cnf

參數(shù):

  • --no-defaults ,不讀取配置文件中的任何內(nèi)容侈离。但是mylogin.cnf除外试幽。

  • --login-path,指定在mysql_config_editor中設(shè)置選項組名稱卦碾。

  • --print-defaults铺坞,打印從參數(shù)配置文件中獲得的所有選項。密碼值會被屏蔽洲胖。

了解了上述的基本參數(shù)作用后济榨,我們來學(xué)習(xí),如何保護(hù)我們的密碼绿映。

使用mysql_config_editor存儲登錄信息

mysql_config_editor是一個存儲mysql登錄信息的工具擒滑,
它會將你的身份認(rèn)證信息存儲到一個名為 .mylogin.cnf 的登錄路徑文件中腐晾。

由于該文件是隱藏文件,你可以用如下命令查看:

ls -l .mylogin.cnf 

文件的內(nèi)容是進(jìn)行了混淆加密的丐一,明文方式它存儲的文件內(nèi)容大概是:

[pathA]
user = aaa
password = aaapwd
host = ip1

[pathB]
user = root
password = pwd2
host = ip2

這里藻糖,可以有多組配置,每一個用括號包裹的塊库车,我們稱它為選項組颖御,每個選項組內(nèi)容包括:主機(jī)、用戶凝颇、密碼潘拱、端口、套接字等信息拧略。

當(dāng)調(diào)用Mysql客戶端命令連接到服務(wù)器時芦岂,客戶端將mylogin.cnf與其他指定的參數(shù)配置文件一起使用。這里的優(yōu)先級高于其他文件垫蛆,但低于在客戶端命令行上顯式指定的配置禽最。

file

當(dāng)然啦,我們也可以顯示的指定用那個選項組袱饭,就像是使用A計劃還是B計劃一樣川无。默認(rèn)mysql會執(zhí)行[client] 和 [mysql] 選項組配置。

將密碼放入受保護(hù)的文件

要查看mysql_config_editor寫入.mylogin.cnf文件的內(nèi)容虑乖,我們可以使用如下命令:

mysql_config_editor print --all

mysql_config_editor print --login-path=pathA


登錄路徑文件必須對當(dāng)前用戶是可讀和可寫的懦趋,而對其他用戶是不可訪問的。否則疹味,mysql_config_editor將忽略它仅叫,客戶機(jī)程序也不會使用它,一個完整的設(shè)置命令入下:

mysql_config_editor set --login-path=pathA  \
--host=localhost --user=root --password --port=3306 \
--socket=~/pathA_mysql.sock

操作幫助說明可以通過執(zhí)行如下命令查看:

mysql_config_editor set --help

其中--socket指定mysql以socket方式運行的sock文件位置。
--password 指定需要密碼糙捺,這里會在回車后讓你輸入密文诫咱。
它默認(rèn)在數(shù)據(jù)存儲到內(nèi)容中,
并且洪灯,我們使用print打印的時候坎缭,它同樣也不會顯示明文,是不是安全多了呢签钩。

file

登錄命令變成:

mysql --login-path=pathA

實際案例應(yīng)用

完成上述配置后掏呼,我們可以愉快的使用密文登錄mysql啦。這里提供一個實際的案例边臼。

要求:編寫crontab定時任務(wù)哄尔,定時的清理mysql A表一天前的數(shù)據(jù)假消,每天早上6點執(zhí)行柠并,需要提供日志記錄顯示執(zhí)行狀態(tài)。

小試牛刀

上面我們已經(jīng)配置好了免密登錄,下面來試試執(zhí)行一條sql語句臼予。

mysql --login-path=pathA -e 'select 1'
file

獲取今天凌晨的毫秒值:

select UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE)) * 1000

沒有任何問題鸣戴,按照要求,我們編寫帶記錄日志的shell腳本粘拾,參考如下:

#!/bin/sh
# adirname - return 絕對路徑
adirname() { odir=`pwd`; cd `dirname $1`; pwd; cd "${odir}"; }
MYNAM=`basename "$0"`
MYDIR=`adirname "$0"`
MYHOME="/home/appuser"
MYLOG_PATH="${MYHOME}/logs"
MYLOG="${MYLOG_PATH}/${MYNAM}_`date +%F`.log"

if [ ! -f "$MYLOG" ]; then
    touch "$MYLOG"
fi

# 記錄日志
function loginfo(){
    echo "$1"
    echo "$(date -d today +"%Y%m%d %H:%M:%S") - $1"  >> ${MYLOG} 2>> ${MYLOG}
}

mysql --login-path=pathA -e 'delete from A where time < UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE)) * 1000'

loginfo "handle delete table successfully,$?"

加入crontab定時任務(wù)

#每天6點執(zhí)行
0 6 * * * /bin/sh /home/root/del_tabl_task.sh

總結(jié)

本文對比介紹了 明文密碼登錄mysql的兩種方式和密文登錄窄锅。希望你了解如下知識點:
1、mysql_config_editor工具的用法及作用缰雇?

2入偷、mysql shell腳本的簡單使用?

3械哟、crontab定時任務(wù)腳本的配置使用疏之。

4、如何在shell中記錄輸出日志到文件暇咆。

當(dāng)然這些知識可能都只是冰山一角锋爪,希望對你有所啟發(fā)。

為了方便大家學(xué)習(xí)討論爸业,我創(chuàng)建了一個java疑難攻堅互助大家庭其骄,和其他傳統(tǒng)的學(xué)習(xí)交流不同。本群主要致力于解決項目中的疑難問題扯旷,在遇到項目難以解決的
問題時拯爽,都可以在這個大家庭里尋求幫助。

公眾關(guān)號注俠夢的開發(fā)筆記后回復(fù)【問題的答案】進(jìn)入:java中Integer包裝類的基本數(shù)據(jù)類型是钧忽?
如果你也經(jīng)歷過遇到項目難題某抓,無從下手,
他人有可能可以給你提供一些思路和看法惰瓜,一百個人就有一百種思路否副,
同樣,如果你也樂于幫助別人崎坊,那解決別人遇到的問題备禀,也同樣對你是一種鍛煉。

歡迎來公眾號【俠夢的開發(fā)筆記】奈揍,回復(fù)干貨曲尸,領(lǐng)取精選學(xué)習(xí)視頻一份

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市男翰,隨后出現(xiàn)的幾起案子另患,更是在濱河造成了極大的恐慌,老刑警劉巖蛾绎,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昆箕,死亡現(xiàn)場離奇詭異鸦列,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鹏倘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門薯嗤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纤泵,你說我怎么就攤上這事骆姐。” “怎么了捏题?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵玻褪,是天一觀的道長。 經(jīng)常有香客問我公荧,道長归园,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任稚矿,我火速辦了婚禮庸诱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晤揣。我一直安慰自己桥爽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布昧识。 她就那樣靜靜地躺著钠四,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跪楞。 梳的紋絲不亂的頭發(fā)上缀去,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機(jī)與錄音甸祭,去河邊找鬼缕碎。 笑死,一個胖子當(dāng)著我的面吹牛池户,可吹牛的內(nèi)容都是我干的咏雌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼校焦,長吁一口氣:“原來是場噩夢啊……” “哼赊抖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寨典,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤氛雪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耸成,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體报亩,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡浴鸿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捆昏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赚楚。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡毙沾,死狀恐怖骗卜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情左胞,我是刑警寧澤寇仓,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站烤宙,受9級特大地震影響遍烦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躺枕,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一服猪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拐云,春花似錦罢猪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薇缅,卻和暖如春危彩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泳桦。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工汤徽, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灸撰。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓泻骤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梧奢。 傳聞我的和親對象是個殘疾皇子狱掂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

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