mysql 语句LOAD DATA INFILE高效导入数据

mysql 语句LOAD DATA INFILE高效导入数据,第1张

mysql LOAD DATA INFILE使用官方地址

https://dev.mysql.com/doc/refman/5.7/en/load-data.html

load data infile语句从一个文本/文件中以很高的速度写入表中。

读取位于服务器上的文本文件时,文件必须处于数据目录或可被所有人读取

你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据

指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上

eplace和ignore关键词控制对现有的唯一键记录的重复的处理

fields关键字指定了文件记段的分割格式

terminated by分隔符:意思是以什么字符作为分隔符

enclosed by字段括起字符

escaped by转义字符

terminated by描述字段的分隔符,默认情况下是tab字符( )

enclosed by描述的是字段的括起字符。

escaped by描述的转义字符。默认的是反斜杠(backslash: )

1、win系统导入

批处理文件 import.bat 路径为d:/files/bat

/*dbhost执行文件不在本服务器需要,本次忽略*/

/*数据库账号名称*/

/*数据库密码*/

@SET dbpasswd=****

//需要执行的sql语句

/*未配置环境变量时加下下面两句*/

/*连接MySQL数据库并执行sql脚本 注意database为写入数据库名*/

sq文件 demo.sql 路径为d:/files/bat

/*D:filessimple.csv文件路径 ,table为写入数据表名,uname, phone数据库字段名称*/

/*退出*/

simple.csv

php执行批处理

注意如果system执行失败

编辑 php.ini 查找 disable_functions 将等号后面的 system 去掉即可 。其他人自行查资料

注意导入前开启mysql local_infile

开启local_infile

2、linux系统导入

linux导入比较简单:

注意 ***处填写数据库账号,****处填写数据库密码

table为写入数据表名,uname, phone数据库字段名

批处理文件 import.sh 路径为d:/files/bat

php执行批处理

注意如果system执行失败

编辑php.ini查找 disable_functions 将等号后面的 system 去掉即可。其他错误自行查资料

注意导入前开启mysql local_infile

开启local_infile

一般的数据备份用 :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 - 安然

注意:这样就完成了导入,不过中间还可能出现的问题就是要导入文件的权限问题,要保证你所登录的身份有对文件的写 *** 作,所以为了防止万一,我们可以将文件的所有权限都打开:选中文件,点右键,选择属性,选“安全”选项卡,选中你登录的角色,点“编辑”,选中“允许”下面的“完全控制”,点击确定。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7218785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存