如果以前是將時(shí)序數(shù)據(jù)存放在MySQL,現(xiàn)在為了獲取更好的性能和使用可視化工具,我們需要將數(shù)據(jù)從MySQL遷移到Influxdb中。
這看起來(lái)是一個(gè)常見(jiàn)場(chǎng)景,經(jīng)過(guò)一番查閱,發(fā)現(xiàn)了 GreatLakesEnergy /Mysql-to-influxdb 這個(gè)項(xiàng)目。
可惜的是,作者是基于Python2進(jìn)行開(kāi)發(fā)的,而且用了幾個(gè)非常難搭建的模塊。想在Python3中重新使用這個(gè)項(xiàng)目比較困難。所以我Fork了作者的代碼進(jìn)行改造,改造后的代碼如下:
https://github.com/Ckend/Mysql-to-influxdb
如果你有這樣的遷移需求,可以繼續(xù)看下面的詳細(xì)教程。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上噢,如果沒(méi)有,請(qǐng)?jiān)L問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda
Windows環(huán)境下打開(kāi)Cmd(開(kāi)始—運(yùn)行—CMD),蘋果系統(tǒng)環(huán)境下請(qǐng)打開(kāi)Terminal(command+空格輸入Terminal),準(zhǔn)備開(kāi)始輸入命令安裝依賴。
當(dāng)然,我更推薦大家用VSCode編輯器,把本文代碼Copy下來(lái),在編輯器下方的終端運(yùn)行命令安裝依賴模塊,多舒服的一件事?。?a href="http://wenjunhu.com/outside?redirect=http://mp.weixin.qq.com/s?__biz=MzI3MzM0ODU4Mg==&mid=2247485849&idx=1&sn=ec098cf67a55bd1d61d4513397434c94&chksm=eb25eb10dc52620682db716d206c18b00bd53c01743729a9dea381e1791566a04a06f1fabca5&scene=21#wechat_redirect" target="_blank">Python 編程的最好搭檔—VSCode 詳細(xì)指南。
下載或Git Clone我修改好的代碼:
https://github.com/Ckend/Mysql-to-influxdb
解壓進(jìn)入該目錄后,輸入以下命令安裝依賴:
pip install -r requirements.txt
2.遷移配置
在遷移開(kāi)始前,請(qǐng)?jiān)谀阈枰w移的表里加一個(gè)字段 transfered,這個(gè)字段用于檢測(cè)某條數(shù)據(jù)是否被遷移,默認(rèn)設(shè)為0。一旦遷移完成,這個(gè)字段會(huì)被設(shè)為1.
此外,你需要找到你表里的時(shí)間序列字段(time)和分類字段(tag)。
分類字段可能比較難理解,比如說(shuō)你有一張表記錄了每支股票每天的開(kāi)盤價(jià),那么股票id字段便可理解為一個(gè)tag,即下面配置中的siteid_field.
在解壓后的目錄里新建一個(gè)settings.ini, 配置以下信息:
[mysql]
host: mysql host # (本地為127.0.0.1)
port: mysql 端口號(hào) # 3306
username: 用戶名
password: 密碼
db: 數(shù)據(jù)庫(kù)
table: 要遷移的表
check_field: 檢測(cè)字段
time_field: 時(shí)間字段
siteid_field: 分類字段(tag)
[influx]
host: influxdb host # (本地為127.0.0.1)
port: 端口號(hào) # 8086
username: 用戶名
password: 密碼
db: 要遷移進(jìn)入的數(shù)據(jù)庫(kù)
[server]
interval: 5
配置完上述信息后,執(zhí)行命令即可開(kāi)始遷移:
python mysql2influx.py -d -c settings.ini -s
3.遷移是否完成
如何檢測(cè)遷移任務(wù)是否完成,還記得我們剛新增了一個(gè)字段 transfered 用于檢測(cè)某條數(shù)據(jù)是否被遷移嗎?
你只需要在mysql中輸入以下sql查詢是否還有未被遷移的數(shù)據(jù)即可:
SELECT count(1) FROM your_table where transfered = 0;
若不為0則說(shuō)明還有數(shù)據(jù)未被遷移成功。
不過(guò)值得注意的是,遷移腳本里是先進(jìn)行數(shù)據(jù)遷移,再回來(lái)修改transfered的值。
如果你的數(shù)據(jù)量非常大,更新MySQL數(shù)據(jù)有可能會(huì)耗時(shí)極長(zhǎng),因此查詢transfered數(shù)量的結(jié)果有可能不正確。這點(diǎn)需要特別關(guān)注。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7030瀏覽量
89034 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68612 -
MySQL
+關(guān)注
關(guān)注
1文章
809瀏覽量
26569
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論