SQLITE怎样迁移到MYSQL
发布时间:2021-12-18 13:15:09 所属栏目:MySql教程 来源:互联网
导读: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的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读! (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |