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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/703656/viewspace-1038111/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [譯]從 SQLite 逐步遷移到 RoomSQLiteOOM
- [譯] 從 SQLite 逐步遷移到 RoomSQLiteOOM
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- MySQL資料庫遷移到PostgresMySql資料庫
- 乾貨好文 | 初探MySQL遷移到ClickHouseMySql
- 容器化|自建 MySQL 叢集遷移到 KubernetesMySql
- 從Firebase+Redis遷移到PlanetScale+MySQLRedisMySql
- MySQL5.17異機遷移到MySQL 5.7.23基本步驟MySql
- 透過MySQL Workbench 將 SQL Server 遷移到GreatSQLMySqlServer
- 達夢遷移工具之MySQL資料庫遷移到達夢MySql資料庫
- MySQL 5.5使用者遷移到5.7使用者MySql
- svn 遷移到gitGit
- WSL遷移到其他磁碟
- 記一次MySQL資料遷移到SQLServer全過程MySqlServer
- 從 Nginx 遷移到 Envoy ProxyNginx
- 從 golang flag 遷移到 cmdrGolang
- 將nodejs遷移到D盤NodeJS
- Python 決定遷移到 GitHubPythonGithub
- 如何將 CentOS遷移到 AlmaLinux?CentOSLinux
- centos遷移到rocky linux方法CentOSLinux
- uniapp小程式遷移到TSAPP
- 從本地MySQL遷移到雲資料庫,為什麼是Amazon Aurora?MySql資料庫
- MySQL5.7 透過邏輯備份遷移到GreatSQL注意事項MySql
- 5. ActiveMQ平滑遷移到kafkaMQKafka
- LiveData 遷移到 Kotlin Flow詳解LiveDataKotlin
- 使用DynamoShake從dynamodb遷移到mongodbMongoDB
- 從mpvue遷移到uni-appVueAPP
- EF Core從TPH遷移到TPT
- github倉庫遷移到gitlab以及gitlab倉庫遷移到另一個gitlab伺服器GithubGitlab伺服器
- Facebook將花費幾年時間將資料庫遷移到MySQL 8.0資料庫MySql
- Gradle指南之從Groovy遷移到KotlinGradleKotlin
- VMware虛擬機器遷移到PVE虛擬機
- Python 將所有 Bug 遷移到 GitHub 中PythonGithub
- 為什麼把 dig 遷移到 wire
- 【解決方案】MySQL5.7 百萬資料遷移到 ElasticSearch7.x 的思考MySqlElasticsearch
- [譯] 將專案遷移到 Yarn 然後又遷回 npmYarnNPM
- Spring Boot 從1.5遷移到2.0.5 - DZone JavaSpring BootJava
- 從eclipse遷移到idea(1 安裝篇)EclipseIdea
- 【譯】遷移到Room的7個步驟OOM