工作中有時會遇到資料庫遷移的問題,如果是使用相同資料庫的話,遷移方法比較簡單,例如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 測試 現了奇怪的問題,系統走著走著就不發心跳包了,最後跟蹤後發現是上面這個函式返回的值突然變零 我們預想上面的返回值會一直增加,至...