mssql大数据高效率导入mysql

2014-02-13 12:26:40 48 6241


之前在网络上 看到 qqqun数据库  就将其下载下来玩玩大数据(纯属研究)
下载下来发现是mssql 的,个人不怎么喜欢mssql 数据库


同样的负载压力,MySQL要消耗更少的CPU和内存,MS SQL的确是很耗资源
mysql 运行不需要启动那么多的服务 体积更小 mssql 体积很大
mysql 可以跨平台 可以绿色启动 无需安装



于是乎就将该数据库转换成mysql (相信很多人转过)
之前尝试用Navicat 转换 发现速度巨慢



下面分享下我的思路
1、将所有数据库和表合并成一库一表(这样方便更好的处理数据)
@echo off
::echo 该操作会覆盖原有数据 且会执行很长时间 按任意键将继续执行
::pause>nul
::echo delete from qqinfo..qqinfo>1.sql
del /q 1.sql
setlocal Enabledelayedexpansion
set  p=0
for /l %%i in (1,1,11) do (
        for /l %%j in (1,1,100) do (
                set /a p=!p!+1
                echo INSERT INTO qqinfo.dbo.qqinfo^([QQNum],[Nick],[QunNum]^) SELECT [QQNum],[Nick] ,[QunNum] FROM GroupData%%i.dbo.Group!p!>>1.sql
                echo go>>1.sql
                )
        
        )

osql -E -i 1.sql
echo 执行完毕!
2、使用bcp导出为文本文件(mssql自带工具 导出编码默认为gbk)
bcp "SELECT [QQNum],[Nick] ,[QunNum] FROM qqinfo.dbo.qqinfo"  queryout qun.txt -c -S127.0.0.1 -Usa -Psasa
3、使用split命令分割成若干文件以方便快速导入mysql

4、将数据导入到mysql数据库(自动创建库 表 和索引 如果只是一个库一表 创建索引会卡很久很久 很久)
@echo off
::延时脚本
IF EXIST time.vbs @del /q /s time.vbs

@echo wscript.sleep 1000>time.vbs


::创建数据库和表脚本

IF EXIST tables.sql @del /q /s tables.sql
for /l %%i in (1,1,15) do (
echo create table if not exists qqinfo_%%i  ^(^`ID^` int^(11^) NOT NULL AUTO_INCREMENT,^`QQNum^` int^(11^) NOT NULL,^`Nick^` char^(20^) ,^`QunNum^` int^(11^) ,PRIMARY

KEY ^(^`ID^`^),KEY ^`inx_qqinfo^` ^(^`QQNum^`,^`QunNum^`^) ^) ENGINE=MyISAM DEFAULT CHARSET=utf8^;>>tables.sql
)


::创建导入数据脚本
setlocal EnableDelayedExpansion
set  num=0
set p=H:/mysql/data/tmp/
IF EXIST load.sql @del /q /s load.sql
for /r %%i in (qun_a*.txt) do (
set /a num=!num!+1
echo load data infile ^'!p!%%~nxi^' into table qqinfo_2.qqinfo_!num! fields terminated by ^':^' ^(ID,QQNum,Nick,QunNum^)^;>>load.sql
)

::创建数据库
mysql -u root -p123456 -e "create database if not exists `qqinfo_2` DEFAULT CHARACTER SET gbk;"
echo 正在创建表...
@cscript.exe //nologo time.vbs
mysql -u root -p123456 qqinfo_2 < tables.sql
@cscript.exe //nologo time.vbs
echo 创建完成...

mysql -u root -p123456 -e "show tables;" qqinfo_2

@cscript.exe //nologo time.vbs
cls
echo 导入数据 ...
echo 可能需要很久 请耐心等待...
@cscript.exe //nologo time.vbs

mysql -u root -p123456 qqinfo_2 < load.sql

cls
echo 导入成功!
@del /q /s time.vbs
@del /q /s tables.sql
@del /q /s load.sql
pause>nul
说明:

编码 (库、表)统一为gbk 因为bcp导出的数据 为gbk
所用到工具均为数据库自带 注意路径

3个小时处理完所有 比传统方法快 不是一点两点....
分表插入数据并创建索引(分表是重点 如果插入到一库一表 会非常非常慢 估计一个星期吧 甚至更长!!!)
本人非专业人士 了解的知识很粗浅  如果您有更好的见解 欢迎指点 重在交流

关于作者

lostwolf152篇文章2168篇回复

评论48次

要评论?请先  登录  或  注册