記一次資料遷移 mongo到mysql

2021-08-02 07:19:41 字數 2384 閱讀 4654

工作中有時會遇到資料庫遷移的問題,如果是使用相同資料庫的話,遷移方法比較簡單,例如mysql資料庫的遷移:

1、備份資料,使用mysqldump命令

mysqldump -u username -p password database >

./backup.sql

2、還原資料

mysql -u username -p password database <

./backup.sql

database事先建立好的資料庫

mongo資料庫內容遷移到mysql資料庫,由於是不同型別的資料庫,方法有所不同,基本步驟:

1、使用mongoexport命令匯出mongo指定db的collection內容到csv格式檔案,csv檔案每行儲存一條記錄,並且使用用「,」分割字段。

mongoexport -h host -u username -p password -d database -c collect_name -q query -f name1,name2 --

type

=csv -o

./backup.csv

2、處理backup.csv檔案,寫入mysql指定table,

第一種方式 ,使用python語言寫個指令碼執行

#coding=utf-8

import mysqldb

import csv

import time

cur.close()

conn.commit()

conn.close()

if __name__ == "__main__":

conn = mysqldb.connect(host=localhost, port=3306, user=root, passwd='', db='test', charset='utf8')

cur = conn.cursor()

csvfile = file('backup.csv', 'rb')

reader = csv.reader(csvfile)

sql = "insert into table1 (name1, name2) values ('%s','%s)"

args =

for line in reader:

print line

try:

cur.executemany(sql, args)

except

exception

as e:

print("exec error: %s" % e)

cur.close()

conn.commit()

conn.close()

csvfile.close()

注意:csv第一行是欄位名稱,需要去掉,不然執行出錯

第二種方式,直接使用mysql命令load data infile方式匯入檔案資料

基本語法:help load data檢視用法

load data [low_priority | concurrent] [local] infile 'file_name'

[replace | ignore]

into table tbl_name

[partition (partition_name,...)]

[character set charset_name]

[[terminated by 'string']

[[optionally] enclosed by 'char']

[escaped by 'char']

][lines

[starting by 'string']

[terminated by 'string']

][ignore number ]

[(col_name_or_user_var,...)]

[set col_name = expr,...]

$mysql

-uroot

mysql> use test;

mysql> load data

local infile './backup.csv'

->

into table `table1` character set utf8

-> fields terminated by

',' optionally enclosed by

'"'-> lines terminated by

'\n'

-> ignore 1 lines;

記一次資料庫遷移遇到的坑

因為一開始專案中用的是oracle的資料庫,後來因為一些原因需要換成mysql的。由於oracle中所有庫表 欄位名都是大小不敏感的,所以專案中各種大寫小寫都有人用,但是遷移到mysql上面,他是區分的,然後就把mysql也設定成不區分大小寫了,並且字符集也設定成了utf8 general ci。後...

記一次資料提取過程

某次需要乙個中文電碼本,然而網上搜到的要麼收費,要麼不行,所以打算自己做乙份,但是看了下資料量實在太大只能放棄,那麼怎麼辦呢。收到乙個軟體teleccodetool 可以查詢漢字對應的電碼,隨即準備提取,過程記錄如下。無關的檔案已經刪除了,只剩三個核心檔案 乙個個看,第乙個配置檔案開啟沒啥有用的訊息...

記一次資料越界的事

最近在作乙個基於聯盛德的 w600晶元進行ayla雲移植時,用到了作業系統的tick獲取,獲取函式如下 u32 clock ms void else return ms 測試 現了奇怪的問題,系統走著走著就不發心跳包了,最後跟蹤後發現是上面這個函式返回的值突然變零 我們預想上面的返回值會一直增加,至...