日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sqlite换成mysql_从SQLITE的数据转到MYSQL

發布時間:2023/12/9 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqlite换成mysql_从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 -h127.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 -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文件

# 導出數據表結構

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 -h127.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 -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

總結

以上是生活随笔為你收集整理的sqlite换成mysql_从SQLITE的数据转到MYSQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。