運維平臺的建設思考-後設資料管理(三)
繼第一篇,第二篇介紹了關於後設資料的一些想法,最近做了一些改進。
對於一部分的後設資料抽取大體有下面的兩種方式。假設資料來源已經做了很大的努力,終於統一起來了。我們現在要透過ssh的方式從源端抽取出資料來。
一種方式就是直接透過ssh的方式傳送對應的查詢指令碼,然後可以得到一個完整的列表,二次加工即可。
另外一種方式是直接在每臺伺服器上都部署一個類似agent的載體,每個伺服器端都會獨立的執行這些指令碼內容,然後透過ssh的方式返回即可。
當然下面的圖有一些誇張,實際上沒有這麼多的資料來源,只是說明了這種方式。
從個人的角度而言,如果喜歡偷懶類似一勞永逸的方式,我還是喜歡第一種方式,透過ssh傳送指令碼,然後返回服務端的執行結果。這種方式不需要特別的配置,比較輕巧快捷,當然這種場景的前提是指令碼內容不大,呼叫次數不頻繁。
假設呼叫的指令碼為seal.sql,嘗試使用下面的方式來呼叫。語句這麼簡答,我都有一種勝利在握的感覺了。
cat seal.sql | ssh 10.12.xxxx 'mysql '
但是奇怪的是,沒有任何的輸出。
反覆嘗試,在資料庫端反覆執行了指令碼,內容都沒有任何的問題。
所以感覺是不是這種方式會有一些特殊字元的影響或者是語句的註釋干擾等等。
然後在得不到任何反饋的情況下,先嚐試使用本地的方式來執行,遠端呼叫指令碼的形式,這種方式奇怪的是也依舊沒有任何結果。
嘗試了很多種方式,看起來是執行了,但是沒有結果輸出
# ssh 10.127.33.7 ' cat /home/dba/Monitor_Hardware/seal.sql|mysql '
Logging to file '/home/mysql/query.log'
# ssh 10.127.33.7 'mysql < /home/dba/Monitor_Hardware/seal.sql'
Logging to file '/home/mysql/query.log'
# ssh 10.127.33.7 'mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log'
# ssh 10.127.33.7 "mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log"
# ssh 10.127.33.7 "/usr/bin/mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log"
# ssh 10.127.33.7 "/usr/bin/mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log" # ssh 10.127.33.7 "mysql seal 'select user from mysql.user'"
Logging to file '/home/mysql/query.log'
呼叫了一個sql語句來驗證,發現還是有結果輸出的。
# ssh 10.127.33.7 "mysql seal -e 'select user from mysql.user'"
Logging to file '/home/mysql/query.log'
xxxxuser
sys_pm
mysqlmon
..
那麼問題在哪裡呢?
在反覆檢視指令碼之後,唯一可以假定的就是裡面有一個欄位值是中文了。
sql語句類似 select xxxxx join xxxxx where device.server_responser in ('楊建榮');
按照這種情況來看,還是來看看是不是中文的影響。
可以使用這種方式來簡單驗證,傳入變數LANG
cat seal.sql | ssh 10.127.33.7 'export LANG=en_US.utf-8;mysql -vv'
還是原來的指令碼,加入-vv的選項,這種方式的輸出結果為:
Empty set
Bye
看來就是語句執行了,但是因為字符集的不相容,導致沒有查詢到任何結果。
這個問題的一個原因就是因為sql語句中的欄位值為中文,可以嘗試透過其它的code值來代替。
另外一個就是需要考慮字符集的情況,當然明確了這點。這個問題客戶端為GBK,資料庫端為UTF8,所以還是需要考慮這種差異,最後還是使用傳送指令碼的方式來執行,使用下面的方式來改進即可。
cat seal.sql |iconv -f GBK -t UTF8 | ssh 10.127.33.7 'export LANG=en_US.utf-8;mysql ' |iconv -f UTF8 -t GBK
對於一部分的後設資料抽取大體有下面的兩種方式。假設資料來源已經做了很大的努力,終於統一起來了。我們現在要透過ssh的方式從源端抽取出資料來。
一種方式就是直接透過ssh的方式傳送對應的查詢指令碼,然後可以得到一個完整的列表,二次加工即可。
另外一種方式是直接在每臺伺服器上都部署一個類似agent的載體,每個伺服器端都會獨立的執行這些指令碼內容,然後透過ssh的方式返回即可。
當然下面的圖有一些誇張,實際上沒有這麼多的資料來源,只是說明了這種方式。
從個人的角度而言,如果喜歡偷懶類似一勞永逸的方式,我還是喜歡第一種方式,透過ssh傳送指令碼,然後返回服務端的執行結果。這種方式不需要特別的配置,比較輕巧快捷,當然這種場景的前提是指令碼內容不大,呼叫次數不頻繁。
假設呼叫的指令碼為seal.sql,嘗試使用下面的方式來呼叫。語句這麼簡答,我都有一種勝利在握的感覺了。
cat seal.sql | ssh 10.12.xxxx 'mysql '
但是奇怪的是,沒有任何的輸出。
反覆嘗試,在資料庫端反覆執行了指令碼,內容都沒有任何的問題。
所以感覺是不是這種方式會有一些特殊字元的影響或者是語句的註釋干擾等等。
然後在得不到任何反饋的情況下,先嚐試使用本地的方式來執行,遠端呼叫指令碼的形式,這種方式奇怪的是也依舊沒有任何結果。
嘗試了很多種方式,看起來是執行了,但是沒有結果輸出
# ssh 10.127.33.7 ' cat /home/dba/Monitor_Hardware/seal.sql|mysql '
Logging to file '/home/mysql/query.log'
# ssh 10.127.33.7 'mysql < /home/dba/Monitor_Hardware/seal.sql'
Logging to file '/home/mysql/query.log'
# ssh 10.127.33.7 'mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log'
# ssh 10.127.33.7 "mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log"
# ssh 10.127.33.7 "/usr/bin/mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log"
# ssh 10.127.33.7 "/usr/bin/mysql < /home/dba/Monitor_Hardware/seal.sql > /tmp/a.log" # ssh 10.127.33.7 "mysql seal 'select user from mysql.user'"
Logging to file '/home/mysql/query.log'
呼叫了一個sql語句來驗證,發現還是有結果輸出的。
# ssh 10.127.33.7 "mysql seal -e 'select user from mysql.user'"
Logging to file '/home/mysql/query.log'
xxxxuser
sys_pm
mysqlmon
..
那麼問題在哪裡呢?
在反覆檢視指令碼之後,唯一可以假定的就是裡面有一個欄位值是中文了。
sql語句類似 select xxxxx join xxxxx where device.server_responser in ('楊建榮');
按照這種情況來看,還是來看看是不是中文的影響。
可以使用這種方式來簡單驗證,傳入變數LANG
cat seal.sql | ssh 10.127.33.7 'export LANG=en_US.utf-8;mysql -vv'
還是原來的指令碼,加入-vv的選項,這種方式的輸出結果為:
Empty set
Bye
看來就是語句執行了,但是因為字符集的不相容,導致沒有查詢到任何結果。
這個問題的一個原因就是因為sql語句中的欄位值為中文,可以嘗試透過其它的code值來代替。
另外一個就是需要考慮字符集的情況,當然明確了這點。這個問題客戶端為GBK,資料庫端為UTF8,所以還是需要考慮這種差異,最後還是使用傳送指令碼的方式來執行,使用下面的方式來改進即可。
cat seal.sql |iconv -f GBK -t UTF8 | ssh 10.127.33.7 'export LANG=en_US.utf-8;mysql ' |iconv -f UTF8 -t GBK
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1991854/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 運維平臺的建設思考-後設資料管理運維
- 運維平臺的建設思考-後設資料管理(五)運維
- 運維平臺的建設思考-後設資料管理(四)運維
- 運維平臺的建設思考-後設資料管理(二)運維
- 運維平臺的建設思考運維
- 京東資料庫智慧運維平臺建設之路資料庫運維
- TDS:標籤平臺+API平臺+資料共享平臺,助力資料運營平臺建設API
- Smartbi:資料治理系列之後設資料管理平臺的原理
- 【數字孿生】智慧燃氣站三維視覺化運維平臺建設方案視覺化運維
- 大資料平臺建設經驗大資料
- 堡壘機:愛奇藝海量伺服器安全運維平臺的建設伺服器運維
- [平臺建設] HBase平臺建設實踐
- 眼下自動化運維平臺的建設應當考慮的方向運維
- 【數字孿生】智慧工廠三維視覺化綜合管理平臺建設方案視覺化
- 企業ETL資料流管理系統--資料平臺建設方案探討
- 銀行容器雲平臺建設的關鍵設計 | 資料
- 自動化平臺中維度設計的一點思考
- 淺談G行資料湖平臺建設
- 圖資料庫平臺建設及業務落地資料庫
- 深度解析大快DKadoop大資料運維管理平臺功能OOP大資料運維
- 大連銀行負載均衡一體化智慧運維平臺建設負載運維
- 江西加快智慧防汛建設構建防汛大資料平臺大資料
- 前端、後端、運維的基本思考前端後端運維
- 黨委組織部資訊工作管理平臺開發,幹部管理平臺建設
- 企業資料平臺建設的基石:構建統一的資料存算能力
- 網易資料基礎平臺建設經驗談
- 將軍令:資料安全平臺建設實踐
- 蔣鴻翔:網易資料基礎平臺建設
- 企業級統一資料平臺建設思路
- 開源 Amundsen:資料發現和後設資料平臺
- 為何程式設計師討厭運維平臺?程式設計師運維
- 智慧化IT運維平臺建設方案,基於智和信通運維體系的高敏捷二次開發運維敏捷
- 建設大型綜合運維平臺,對接整合多廠商網管系統運維
- 打造“資料金字塔”,小米大資料平臺建設之路大資料
- 案例|政務大資料平臺資料安全建設實踐大資料
- B站運維數倉建設和資料治理實踐運維
- “資料+技術”助力雲原生智慧運維體系建設運維
- vivo資料庫與儲存平臺的建設和探索資料庫