SQLITE怎样迁移到MYSQL

网友投稿 394 2023-12-24

SQLITE怎样迁移到MYSQL

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 -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的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL5.7中多源复制及Nginx中间件是怎么样的
下一篇:innobackupex的备份和恢复是怎么样的
相关文章

 发表评论

暂时没有评论,来抢沙发吧~