SQLITE怎样迁移到MYSQL

SQLITE怎样迁移到MySQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

10余年的巩义网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整巩义建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“巩义网站设计”,“巩义网站推广”以来,每个客户项目都认真落实执行。

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

文章名称:SQLITE怎样迁移到MYSQL
当前地址:https://www.cdcxhl.com/article32/ijccpc.html

成都网站建设公司_创新互联,为您提供搜索引擎优化移动网站建设网站收录网站设计用户体验定制开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站制作