博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlite 迁移到 mysql_SQLITE 迁移到 MYSQL
阅读量:6513 次
发布时间:2019-06-24

本文共 2943 字,大约阅读时间需要 9 分钟。

SQLITE 迁移到 MYSQL

接同事需求,要求从SQLITE的数据转到MYSQL,这东西以前也没接触过。这里搜搜,那里试试,下面把过程列一下。

主要过程分三步:

1,把SQLITE表结构导出来,作一定的格式调整

2,把SQLITE数据导出来,作特殊字符的处理

3,导出MYSQL(注意字符集)

下面是我操作的过程, 有两个部分:单表操作和批量处理(含脚本)

########### 单表操作 ####################

# 打开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;/g' create_onmysql.sql

# 在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;/g' create_onmysql.sql

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

转载地址:http://ntifo.baihongyu.com/

你可能感兴趣的文章
实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求
查看>>
安德鲁斯----多媒体编程
查看>>
中断小笔记
查看>>
FreeBinary 格式说明
查看>>
使用Spring Cloud和Docker构建微服务
查看>>
九州云实战人员为您揭秘成功部署OpenStack几大要点
查看>>
医疗卫生系统被爆漏洞,7亿公民信息泄露……
查看>>
CloudCC:智能CRM究竟能否成为下一个行业风口?
查看>>
追求绿色数据中心
查看>>
Web开发初学指南
查看>>
探寻光存储没落的真正原因
查看>>
高通64位ARMv8系列服务器芯片商标命名:Centriq
查看>>
中国人工智能学会通讯——融合经济学原理的个性化推荐 1.1 互联网经济系统的基本问题...
查看>>
戴尔为保护数据安全 推出新款服务器PowerEdge T30
查看>>
今年以来硅晶圆涨幅约达40%
查看>>
构建智能的新一代网络——专访Mellanox市场部副总裁 Gilad Shainer
查看>>
《数字视频和高清:算法和接口》一导读
查看>>
《中国人工智能学会通讯》——6.6 实体消歧技术研究
查看>>
如何在Windows查看端口占用情况及查杀进程
查看>>
云存储应用Upthere获7700万美元股权债务融资
查看>>