久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQLITE怎樣遷移到MYSQL

166次閱讀
沒有評論

共計 3205 個字符,預計需要花費 9 分鐘才能閱讀完成。

SQLITE 怎樣遷移到 MYSQL,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

接同事需求,要求從 SQLITE 的數據轉到 MYSQL,這東西以前也沒接觸過。這里搜搜,那里試試,下面把過程列一下。
主要過程分三步:
1,把 SQLITE 表結構導出來,作一定的格式調整
2,把 SQLITE 數據導出來,作特殊字符的處理
3,導出 MYSQL(注意字符集)[@more@]

下面是我操作的過程,有兩個部分:單表操作和批量處理(含腳本)

########### 單表操作 ####################
# 打開 SQLITE DB
root sqlite3 mig.db

# 查看表, 可用用 .help 獲得幫助
sqlite .tables

# 導出數據表結構
sqlite .output /tmp/heyf/createtable.sql
sqlite .schema accounts_profile  

# 調整建表語句格式, 把雙引號去掉,并加上 MYSQL 的建表約束。
root sed s/ /`/g createtable.sql create_onmysql.sql
root sed -i -e s/^);$/) engine=innodb default charset=utf8 collate=utf8_bin ;/g create_onmysql.sql
root sed -i s/integer.*PRIMARY KEY/int NOT NULL auto_increment PRIMARY KEY/g  create_onmysql.sql
    # sqlite 中,為 INTEGER PRIMARY KEY 的字段將自動增加
root sed -i s/ text/ longtext/g  create_onmysql.sql
    # sqlite 中,text 最大長度為 2G, 在 MYSQL 中需要改成 longtext;

# 在 MYSQL 把表建上:
mysql -uroot -h227.0.0.1 –default-character-set=utf8 test create_onmysql.sql

# 導出數據
sqlite .mode insert accounts_profile_starred_review_requests
sqlite .output /tmp/heyf/accounts_profile_starred_review_requests.sql
sqlite select * from accounts_profile_starred_review_requests;
sqlite .output stdout

# 處理特殊字符
DOTABLE=accounts_profile_starred_review_requests
cd /tmp/heyf
DOFILE=${DOTABLE}.sql
sed -e s///g   $DOFILE   ${DOFILE}.new

# 將數據導入 MYSQL
mysql -uroot -h227.0.0.1 –default-character-set=utf8 test -e truncate table ${DOTABLE};
mysql -uroot -h227.0.0.1 –default-character-set=utf8 test ${DOFILE}.new

如果表很多:那我們就需要批量處理一下啦,下面是一些批量腳本:
########### 批量處理 ####################

# 打開 SQLITE DB
root sqlite3 mig.db

# 查看表
sqlite .tables
  # 把所有表名都放入 TABLE.LIST 文件

# 導出數據表結構
sqlite .output /tmp/heyf/createtable.sql
sqlite .schema accounts_profile  
sqlite .schema … ….

# 在 MYSQL 創建表結構
root sed s/ /`/g createtable.sql create_onmysql.sql
root sed -i -e s/^);$/) engine=innodb default charset=utf8 collate=utf8_bin ;/g create_onmysql.sql
root sed -i s/integer.*PRIMARY KEY/int NOT NULL auto_increment PRIMARY KEY/g  create_onmysql.sql
    # sqlite 中,為 INTEGER PRIMARY KEY 的字段將自動增加
root sed -i s/ text/ longtext/g  create_onmysql.sql
    # sqlite 中,text 最大長度為 2G, 在 MYSQL 中需要改成 longtext;

root mysql -uroot -h227.0.0.1 –default-character-set=utf8 test /tmp/heyf/create_onmysql.sql

# SQLITE 中導出數據
 
## 將所有的表生成導出語句(SQLITE)
## cat   create_exp.sh  
————————-
#!/bin/bash
[$# -ne 1] exit 1
TABFILE=$1
WORKDIR=/tmp/heyf/dmpfile/
OUTFILE=exp.sql
while read LINE
do
 echo $LINE
 echo .mode insert $LINE $OUTFILE
 echo .output  $WORKDIR/${LINE}.sql $OUTFILE
 echo select * from $LINE ; $OUTFILE
 echo .output stdout   $OUTFILE
done $TABFILE
————————-

## 運行后將產生 sqlite 所有表的導出語句
sh create_exp.sh table.list

## 現在進行 SQLITE 可以將所有表的數據導出來。
sqlite3 /home/admin/foryunfei/heyf.db
.read /tmp/heyf/exp.sql

# 處理特殊字符
## 現在需要將所有的 SQL 文件中的 替換成”“, 以使 SQL 能正確執行
## cat   replace.sh  
————————-
#!/bin/bash
[$# -ne 1] exit 1
TABFILE=$1
WORKDIR=/tmp/heyf/dmpfile/
while read DOTABLE
do
 cd $WORKDIR
 DOFILE=${DOTABLE}.sql
 sed -e s///g   $DOFILE   ${DOFILE}.new
done $TABFILE
————————-

## sh replace.sh table.list

## 將數據導入 MYSQL
## cat   imp.sh
————————-
#!/bin/bash
[$# -ne 1] exit 1
TABFILE=$1
WORKDIR=/tmp/heyf/dmpfile/
while read DOTABLE
do
 cd $WORKDIR
 mysql -uroot -h227.0.0.1 –default-character-set=utf8 test -e truncate table ${DOTABLE};
 mysql -uroot -h227.0.0.1 –default-character-set=utf8 test ${DOTABLE}.sql.new
done $TABFILE
————————-

## sh imp.sh table.list

看完上述內容,你們掌握 SQLITE 怎樣遷移到 MYSQL 的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計3205字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 井陉县| 泽普县| 成安县| 游戏| 大宁县| 汾西县| 广宗县| 黑山县| 平遥县| 雅江县| 柘荣县| 新民市| 安龙县| 饶河县| 韶关市| 清水河县| 江孜县| 桐庐县| 乐业县| 威信县| 西乌珠穆沁旗| 栾城县| 巩留县| 扶余县| 互助| 汤原县| 抚松县| 霍林郭勒市| 酒泉市| 丹巴县| 莱芜市| 泰兴市| 巩义市| 东海县| 苏尼特右旗| 安义县| 三穗县| 桓台县| 日土县| 威海市| 望谟县|