SQLITE怎样迁移到MYSQL

59次阅读
没有评论

共计 3205 个字符,预计需要花费 9 分钟才能阅读完成。

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计3205字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)