Mysql

上传大的sql文件到数据库时出现的问题

场景:
由于需要对公司查询系统做一次改进,增加ES分布式搜索引擎,今天从数据库中导出了一批数据,测试数据库查询与ES查询的性能差异。另外开了几台服务器,用来搭建ES测试集群,在服务器中安装了Mysql,安装Mysql可以参考:centos6.5安装mysql。之后将sql文件导入数据库,以下是导入时遇到的问题

准备工作

linux服务器中,数据导入到数据库
1)将sql文件放在某个目录下 例如:/opt
2)登陆数据库
3)source /opt/*.sql

问题1、数据库中没有创建表

一开始我以为可以直接将数据导入到数据库,不用任何其他操作,事实证明我错了,报了以上的错误,es下的表不存在,说明需要提前创建一个表,且表的字段需要包含sql文件中所有的字段,要不然也会报错。
但是又出现了一个新的问题,表结构不知道,因为数据是同事从服务器拷下来的,而且只选取了部分字段,由于没有提前记录,所以不知道有哪些字段。好吧,那就打开文件看看吧,可是接近一亿条数据,用文本编辑器打开直接崩溃了,网上搜了一下可以用Editplus打开,试了一下打开还是很困难。
后来只能让同事把所有字段都给我,把所有的字段都添加了。

问题2、字段类型不对

我根据创建的java实体类里面的成员变量来创建的表结构,数据库中的一些字段是用varchar类型的,但是用了其他的类型就会报以上的错。

问题3、字段类型宽度

int类型默认最多存储11个字节,int(20)是真实的分类了20个字节的空间用来存储,如果存储不满的话就会用0补全,所以不要用太长的宽度,除了必要,要不然就会浪费存储空间。

问题4、编码问题

在当初安装Mysql的时候就已经在配置文件中指定了默认编码格式是utf8,但是在上传数据的时候还是会报以下错误:

说明字段使用了其他编码格式,后来查找博客发现,当时配置的默认编码格式是对数据库的编码格式的更改,对于表中的字段还有单独的编码格式,如果不对对应的字段更改编码格式,那么还是会出错
解决方法:(设定字段的编码格式)
alter table 表名 change 字段名 字段名 varchar(30) character set utf8

总结

如果在sql文件中开头写入一个创建表的sql语句,就可以直接导入数据,不用在数据库中创建了。当以上工作完成后,数据开始上传,虽然速度很快,但是由于数据量很大,花费时间还是比较长,以后如果能有更好的方法,比如批量上传,应该可以很大的减少时间。

原文地址:https://www.cnblogs.com/xushun/p/11240969.html