sqlite换成mysql_从SQLITE的数据转到MYSQL
接同事需求,要求從SQLITE的數(shù)據(jù)轉(zhuǎn)到MYSQL,這東西以前也沒(méi)接觸過(guò)。這里搜搜,那里試試,下面把過(guò)程列一下。
主要過(guò)程分三步:
1,把SQLITE表結(jié)構(gòu)導(dǎo)出來(lái),作一定的格式調(diào)整
2,把SQLITE數(shù)據(jù)導(dǎo)出來(lái),作特殊字符的處理
3,導(dǎo)出MYSQL(注意字符集)[@more@]
下面是我操作的過(guò)程, 有兩個(gè)部分:單表操作和批量處理(含腳本)
########### 單表操作 ####################
# 打開SQLITE DB
root> sqlite3 mig.db
# 查看表,可用用".help"獲得幫助
sqlite>.tables
# 導(dǎo)出數(shù)據(jù)表結(jié)構(gòu)
sqlite>.output /tmp/heyf/createtable.sql
sqlite>.schema accounts_profile
# 調(diào)整建表語(yǔ)句格式, 把雙引號(hào)去掉,并加上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 的字段將自動(dòng)增加
root>sed -i 's/ text/ longtext/g' create_onmysql.sql
# sqlite中,text 最大長(zhǎng)度為2G, 在MYSQL中需要改成longtext;
# 在MYSQL把表建上:
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < create_onmysql.sql
# 導(dǎo)出數(shù)據(jù)
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
# 將數(shù)據(jù)導(dǎo)入MYSQL
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test -e "truncate table ${DOTABLE};"
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < ${DOFILE}.new
如果表很多:那我們就需要批量處理一下啦,下面是一些批量腳本 :
########### 批量處理 ####################
# 打開SQLITE DB
root> sqlite3 mig.db
# 查看表
sqlite>.tables
# 把所有表名都放入TABLE.LIST文件
# 導(dǎo)出數(shù)據(jù)表結(jié)構(gòu)
sqlite>.output /tmp/heyf/createtable.sql
sqlite>.schema accounts_profile
sqlite>.schema ... ....
#在MYSQL 創(chuàng)建表結(jié)構(gòu)
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 的字段將自動(dòng)增加
root>sed -i 's/ text/ longtext/g' create_onmysql.sql
# sqlite中,text 最大長(zhǎng)度為2G, 在MYSQL中需要改成longtext;
root>mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < /tmp/heyf/create_onmysql.sql
# SQLITE 中導(dǎo)出數(shù)據(jù)
## 將所有的表生成導(dǎo)出語(yǔ)句(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
-------------------------
## 運(yùn)行后將產(chǎn)生 sqlite 所有表的導(dǎo)出語(yǔ)句
sh create_exp.sh table.list
## 現(xiàn)在進(jìn)行SQLITE可以將所有表的數(shù)據(jù)導(dǎo)出來(lái)。
sqlite3 /home/admin/foryunfei/heyf.db
.read /tmp/heyf/exp.sql
# 處理特殊字符
## 現(xiàn)在需要將所有的SQL文件中的""替換成”“,以使SQL能正確執(zhí)行
## 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
## 將數(shù)據(jù)導(dǎo)入MYSQL
## cat imp.sh
-------------------------
#!/bin/bash
[ $# -ne 1 ] && exit 1
TABFILE=$1
WORKDIR=/tmp/heyf/dmpfile/
while read DOTABLE
do
cd $WORKDIR
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test -e "truncate table ${DOTABLE};"
mysql -uroot -h127.0.0.1 --default-character-set=utf8 test < ${DOTABLE}.sql.new
done < $TABFILE
-------------------------
## sh imp.sh table.list
總結(jié)
以上是生活随笔為你收集整理的sqlite换成mysql_从SQLITE的数据转到MYSQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 多格式无水印录屏软件
- 下一篇: 冒名者还是重名?疑惑中!