SQLITE 迁移到 MYSQL接同事需求,要求从SQLITE的数据转到MYSQL,这东西以前也没接触过。这里搜搜,那里试试,下面把过程列一下。主要过程分三步:1,把SQLITE表结构导出来,作一定的格式调整2,把SQLITE数据导出来,作特殊字符的处理3,导出MYSQL(注意字符集)下面是我操作的过程, 有两个部分:单表操作和批量处理(含脚本)########### 单表操作 ##################### 打开SQLITE DBroot> sqlite3 mig.db# 查看表,可用用".help"获得帮助sqlite>.tables# 导出数据表结构sqlite>.output /tmp/heyf/createtable.sqlsqlite>.schema accounts_profile# 调整建表语句格式, 把双引号去掉,并加上MYSQL的建表约束。root>sed 's/"/`/g' createtable.sql > create_onmysql.sqlroot>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 # 导出数据sqlite>.mode insert accounts_profile_starred_review_requestssqlite>.output /tmp/heyf/accounts_profile_starred_review_requests.sqlsqlite>select * from accounts_profile_starred_review_requests;sqlite>.output stdout# 处理特殊字符DOTABLE=accounts_profile_starred_review_requestscd /tmp/heyfDOFILE=${DOTABLE}.sqlsed -e "s///g" $DOFILE > ${DOFILE}.new# 将数据导入MYSQLmysql -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 如果表很多:那我们就需要批量处理一下啦,下面是一些批量脚本 :########### 批量处理 ##################### 打开SQLITE DBroot> sqlite3 mig.db# 查看表sqlite>.tables# 把所有表名都放入TABLE.LIST文件# 导出数据表结构sqlite>.output /tmp/heyf/createtable.sqlsqlite>.schema accounts_profilesqlite>.schema ... ....#在MYSQL 创建表结构root>sed 's/"/`/g' createtable.sql > create_onmysql.sqlroot>sed -i -e 's/^);$/) engine=innodb default charset=utf8;/g' create_onmysql.sqlroot>mysql -uroot -h127.0.0.1 --default-character-set=utf8 test # SQLITE 中导出数据## 将所有的表生成导出语句(SQLITE)## cat create_exp.sh-------------------------#!/bin/bash[ $# -ne 1 ] && exit 1TABFILE=$1WORKDIR=/tmp/heyf/dmpfile/OUTFILE=exp.sqlwhile read LINEdoecho $LINEecho ".mode insert $LINE" >> $OUTFILEecho ".output $WORKDIR/${LINE}.sql ">> $OUTFILEecho "select * from $LINE ;" >> $OUTFILEecho ".output stdout " >> $OUTFILEdone -------------------------## 运行后将产生 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 1TABFILE=$1WORKDIR=/tmp/heyf/dmpfile/while read DOTABLEdocd $WORKDIRDOFILE=${DOTABLE}.sqlsed -e "s///g" $DOFILE > ${DOFILE}.newdone -------------------------## sh replace.sh table.list## 将数据导入MYSQL## cat imp.sh-------------------------#!/bin/bash[ $# -ne 1 ] && exit 1TABFILE=$1WORKDIR=/tmp/heyf/dmpfile/while read DOTABLEdocd $WORKDIRmysql -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 done -------------------------## sh imp.sh
09-17 09:48