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 - 安然
注意:这样就完成了导入,不过中间还可能出现的问题就是要导入文件的权限问题,要保证你所登录的身份有对文件的写 *** 作,所以为了防止万一,我们可以将文件的所有权限都打开:选中文件,点右键,选择属性,选“安全”选项卡,选中你登录的角色,点“编辑”,选中“允许”下面的“完全控制”,点击确定。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)