61阅读

mysql数据库导入导出-从MySQL导入导出大量数据的程序实现方法

发布时间:2017-09-12 所属栏目:语言

一 : 从MySQL导入导出大量数据的程序实现方法

大家一定使用过 phpmyadmin 里面的数据库导入,导出功能,非常方便。但是在实际应用中,我发现如下几个问题:

1 数据库超过一定尺寸,比如6M 这时使用导出一般没问题,可以正确的保存到本机硬盘上面,但是导入则不行!原因是:一般的 PHP.INI 里面设置临时文件/上传文件的大小限制为2M,而phpmyadmin使用了上传的方式,造成失败。

2 导出到硬盘的 .SQL 文件在导回时,经常出现由于某些单引号的问题引起失败,造成导入失败,只能用 mysql等应用程序导入了。 我的数据库已经超过10M,所以必须解决这个问题。我的思路:

导出: 用phpmyadmin 保存数据库/表格结构,用脚本读取数据库内容并保存到文件里面!
导入: 用phpmyadmin 恢复数据库/表格结构,用脚本读取文件,然后保存到库里面!

导出程序如下:调用方法为 ****.php?table=tablename
这个简单的程序目前一次保存一个表格!!每行为一个字段的数据!!

< ?
if($table=="")exit();
mysql_connect("localhost","name","password");
mysql_select_db("database");
$result = mysql_query("select * from $table");
if(mysql_num_rows($result) < = 0) exit();
echo "开始转换数据到文本...
";
$handle = fopen("$table.txt","w");
$numfields = mysql_num_fields($result);
fputs($handle,$numfields."rn");
for($k=0;$k< mysql_num_rows($result);$k++)
{
$msg = mysql_fetch_row($result);
for($i=0;$i< $numfields;$i++)
{
$msg[$i] = str_replace("rn","&&php2000mysqlreturn&&",$msg[$i]);
$msg[$i] = str_replace("n" ,"&&php2000mysqlreturn&&",$msg[$i]);
fputs($handle,$msg[$i]."rn");
}
fputs($handle,"------- php2000 dump data program V1.0 for MySQL --------rn");
}
fclose($handle);
echo "ok";
?>

导入的程序如下:用法同上面!

< ?
if($table=="")exit();
mysql_connect("localhost","name","password");
mysql_select_db("database");
$message = file("$table.txt");
echo $numfields = chop($message[0]);
for($k=1;$k< count($message);$k+=($numfields+1))
{
$value="";
for ($i=$k;$i< ($k+$numfields-1);$i++)
{
$tmp = str_replace("&&php2000mysqlreturn&&","rn",chop($message[$i]));
$value .= "'".addslashes($tmp)."',";
}
$tmp = str_replace("&&php2000mysqlreturn&&","rn",chop($message[$k+$numfields-1]));
$value .= "'".$tmp."'";
$query = "insert into $table values (".$value.")";
echo mysql_error();
mysql_query($query);
echo $k." ";
}
echo "ok";
?>

使用方法和可能的问题!
1 导入时 file()函数可能会有问题(我的10M的数据没出现问题),可以改为 fopen()然后没次读一行!!
2 导入,导出都需要用 ftp 操作,也就是导出后,用 ftp 把数据转到本机,导入时先用ftp转移数据到服务器!

 

二 : sqlserver导入数据到mysql的详细图解

1、去mysql的官方下载一个odbc的驱动,因为MSsql一直没有集成mysql的驱动,这个玩意需要单独下载,并安装的。
我下载的是windows解压缩的包Without installer (unzip in C:),没有选择安装的。绿色版比安装版本要好。点击install的一个bat文件。
2、如果安装成功,在ODBC数据源驱动里面有个选项,如下图:
 
                                                  
3、点击上图的用户dsn,添加一个mysql的连接,前提是你有一个mysql的数据库。
 
   
双击之后出现下面的提示框:
 


啊,哈,成功了一半了。

4、如果是SQL server2000用DTS的话,就可以直接用了。关键步骤在下面




下面这个界面很熟悉了:



ok导入完成了。
当然也可以使用文件dsn,把连接串存成一个文件,然后导入的时候选择文件dsn,只要找到连接串的路径就可以了,不在赘述。。

5、如果你用的是SQL2005的ssis的话,有点恶心。在这里我在强调一下:

我十分讨厌sql2005里面的DTS。希望微软的人能看到。
 

这里面的dsn要手动写的,没有办法从odbc里面直接读取出来,这个功能很实用,不会让人产生很多的误解。但是在2k5里面却没有,非常费解,微软的家伙是干啥吃的。
别以为你已经成功了,点下一步,在点下一步,等死吧。

我操,只能选择-编写查询以指定要传输的数据。吐血了。。有200多个表啊。这tmd咋搞?
经过测试,文件dsn和系统dsn都没有选择所有的表。而如果选择文件dsn用连接字符串的方式报这个错误:


我十分讨厌SQL server2005的DTS功能,设计微软SQL Server 2005的工程师是个白痴。

我决定用2K了。

我有测试了一下2008,嗯。2008有这个功能,下图:

SQL Server 迁移数据到MySQL

一、背景

由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL;由于涉及的表比较多,所以想在MySQL中生成对应表并导入数据;

上网找了些资料,如:将ACCESS和MSSQL导入MYSQL中、MySQL Migration 实现 MSSQL 到 MySQL数据迁移,虽然不知道里面的做法是否可以成功转移,但是里面的过程比较复杂,没有去尝试,后来自己找到了方法,最重要就是简单和准确(暂时没发现明显的BUG),这里分享给大家。

 

二、转移数据

我使用了MySQL的Client的工具SQLyog,这个工具的安装很简单。安装完成之后点击需要导入的目标数据库,点击右键【Import】->【Import Extenal Data】;

clip_image002

(Figure1:Import)

选择【Start a new job】,点击【下一步】;

clip_image003

(Figure2:Start a new job)

下面就是DSN的设置界面,如果你的下来列表中没有需要导出SQL Server数据库的DSN,那么需要通过【Create a New DSN】来创建一个新的DSN连接到SQL Sever;

clip_image004

(Figure3:Create a New DSN)

clip_image005

(Figure4:创建新数据源)

clip_image006

(Figure5:选择数据源类型)

把上面的设置保存为一个local.dsn文件;

clip_image007

(Figure6:选择数据源保存路径)

clip_image008

(Figure7:选择SQL Server服务器)

clip_image009

(Figure8:设置SQL Server帐号和密码)

clip_image010

(Figure9:选择SQL Server数据库)

clip_image011

(Figure10:测试数据源)

clip_image012

(Figure11:测试成功)

选中【File DSN】,在浏览中选择我们刚刚创建好的DSN,接着填写登录到SQL Server的帐号和密码;

clip_image013

(Figure12:选择DSN)

下一步,选择目标MySQL服务器,填写IP地址和帐号密码,并且需要选择目标数据库;

clip_image014

(Figure13:设置MySQL帐号和密码目标数据库)

这一步类似SQL Server的导入导出功能,这里可以拷贝一个表或者使用SQL脚本过滤数据;

clip_image015

(Figure14:表拷贝)

上面的全部过程就是为创建SQL Server与MySQL的一个管道,接下来就是最为重要的设置SQL Server表与MySQL表之间的对应关系了;里面包括了SQL Server表字段与MySQL表字段之间的对应关系【Map】,高级选项【Advanced】,过滤【WHERE】。

clip_image016

(Figure15:选择表对应关系)

下图Figure16,数据源【Source】,描述【Destination】,特别注意这里数据类型【Type】,这里的意思是转换目标的数据类型,但是不需要跟目标表的一样,因为这里是做为一个临时存储的数据类型,类似FindOn在SQL Server中是datetime,这里转换为MySQL的timestamp,其实MySQL目标表的数据类型是datetime,这样的设置也是可以转换成功的。

clip_image018

(Figure16:表字段转换)

clip_image019

(Figure17:高级选项)

clip_image020

(Figure18:Error)

clip_image021

(Figure19:Log)

clip_image022

(Figure20:执行信息)

clip_image023

(Figure21:执行结果)

clip_image024

(Figure22:原始SQL Server的数据列表)

clip_image025

(Figure23:转移到MySQL的数据列表)

对比下Figure20与Figure21,发现我们数据已经全部转移成功了;

三 : 用Navicat for MySQL进行数据库的导入导出 图文方法

当时的处理是复制数据库文件夹给机房的服务器。


看见灰色的insert into 了吗,因为某字段里含有一些转义字符,所以就出错了。

今天,琢磨了一下Navicat for MySQL,发现了其竟然带有一个数据导入导出的功能、狂喜


就是这个Tools -> Data Transfer,数据传输、


选取远程的数据库,和本机的数据库,对应好。


点取Start就可以了。

看来良好的工具可以事半功倍。

四 : 实践分享:ACCESS数据库导入mysql数据库

 

  作为程序员很多时候要进行不同数据库之间的导入导出工作,这样是为了节省数据录入的时间。下面我就和大家分享一下如何把数据从ACCESS数据库导入mysql数据库。

  首先说明一下思路,可以导入mysql的方法有很多,但不包过access直接导入,网上有很多介绍CSV格式导入mysql的,但操作很不方便,经常发生错误而无法导入。sql语句导入是最简单的。那有没有办法把access数据库转换成sql语句呢。下面本文的重点出现了,使用“DB2mysql.exe”工具,可以很方便的把access数据库转换成一句句的"insert into table"sql语句。生产了sql语句,就是直接复制语句粘贴到phpmyadmin总,运行即可。

  下面是软件操作截图。

  

 

  

 

  

 

  

 

  

 

  是不是很简单的,但有一点要说明下,通过DB2mysql导入的数据不支持中文,中文会变成?号。如何解决这个问题笔者正在思考实践中,如果广大的读者有好的方便欢迎留言交流!此文为站长网首发,转载请保留www.678baidu.com,谢谢。

本文标题:mysql数据库导入导出-从MySQL导入导出大量数据的程序实现方法
本文地址: http://www.61k.com/1093446.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1