重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
设n个线程同时工作, 把文件份成n份,从n份的起始位置开始读,读一部分保存一部分。地n+1个线程读剩余的文件并保存。
成都创新互联主要从事做网站、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务下城,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
一般的数据备份用 :mysql路径+bin/mysqldump -u 用户名 -p 数据库名 导出的文件名
数据还原是:到mysql命令行下面,用:source 文件名;的方法。
但是这种方法对大数据量的表进行操作就非常慢。因为他不仅导出了数据还导出了表结构。
在针对大数据量的表时,我们可以用infile和 outfile来操作。
outfile导出数据库数据的用法:
下图我们可以看到6百多万数据35秒就搞定了:
下面我们看看infile的语法:
在infile导入数据的时候,我们还可以做一些优化。我们可以用
alter table table_name disable keys 关闭普通索引。等数据导入玩,再用:
alter table table_name enable keys 来开启普通索引。这样就不会边导入数据,边整理索引的二叉树儿影响导数据的效率。
如果可以保证 数据的正确性,我们可以将表的唯一索引也关闭,之后再开启,不是每条数据就算是唯一的他都要去检测一遍。命令:
set unique_checks=0; #关闭唯一校验
set unique_checks=1;#开启唯一校验
如果是InnoDB存储引擎,我们还可以set auto commit=0;关闭自动提交,来提高效率。InnoDB是按主键的顺序保存的,我们将其主键顺序排列也可以提高效率。
下面我们对myisam引擎的表做个测试,我们先不关索引,导入数据(用了近4分钟):
然后我们先把索引关闭试试(只用了一分钟多一点,快了不少啊!摸摸大!):
1、首先已管理员身份(通过win+r)进入命令提示符
2、先进入MYSQL安装目录,以我的为例:d:/wamp/bin/mysql/mysql5.5.20/bin 进入该目录的bin目录下,该目录下有个mysql.exe 文件
mysql 导入超大文件到数据库 - queen - 安然
3、为了保证一次性通过,可以先测试一下数据库的是否连接成功 mysql -u root -p (数据库有密码的写上密码);再测试一下访问的数据库是否能访问 mysql -u root -p (数据库有密码的写上密码) craft(这个就是数据库的名称);我第二次导入时遇到一个问题,就是我测试数据库连接成功后,直接又测试数据库是否能够访问,出现错误
mysql 导入超大文件到数据库 - queen - 安然
我检查了一遍命令没发现错误啊,没办法了,问我领导,人家三下五除二就搞定了,问了才知道,所有的命令都应该在
mysql 导入超大文件到数据库 - queen - 安然
下执行,包括测试数据库是否连接成功,数据库是否能访问和最后的数据库导入,我的错误就是在检查了数据库是否连接成功后就进入mysql里,没有退出来。好吧,又记了一遍。
4、如果上面的操作没有问题,下一步就进行数据导入操作
mysql -u root -p (数据库有密码的写上密码) craft d:/craft.sql
导入过程可能会由于其他原因导致错误,我遇到的是在导入过程中可能由于编码的原因出现错误,所以,可以再加上点内容 mysql -u root -p --default-character-set=utf8 craft d:/craft.sql,敲回车后,出现输入密码提示,如果数据库设置密码,就可以输入密码后再打回车,直到导入操作完成
mysql 导入超大文件到数据库 - queen - 安然
注意:这样就完成了导入,不过中间还可能出现的问题就是要导入文件的权限问题,要保证你所登录的身份有对文件的写操作,所以为了防止万一,我们可以将文件的所有权限都打开:选中文件,点右键,选择属性,选“安全”选项卡,选中你登录的角色,点“编辑”,选中“允许”下面的“完全控制”,点击确定。
你要是做程序的话,应该把图片存在设置的文件夹中,数据库只存图片的路径。
如果想存文件建议用oracle。mysql对存储文件相对效率不高。
如果分块的话那我觉得要建立一个表,专门存放这些分块,表的结构为
id 文件的ID号
subVolumeID 文件的分卷号,即:如果该文件有两个分块那么就有1、2两条记录
data 文件的对应分卷号的数据。
在保存文件的时候,先判断需要分多少块,然后以每块一条记录的插入上面所讲的表结构中。
同样,要取的时候就查询此表,然后按照分卷号顺序把文件组合回来即可。
以上就是思路,代码的话可以根据你上面提供的改一下就可以了,不过要注意的是插入记录时要启动事务,避免插入不完整的文件数据。