使用多列本地文件mysql

时间:2018-07-20 11:43:59

标签: mysql bash load-data-infile

我目前正在尝试导入一个大型CSV文件(14-15百万行),其中包含许多列(60),文件大小约为7 GB。

表中有一个主键,这可能会导致脚本变慢,但是我确实需要该主键。

我尝试将CS​​V分成较小的部分(每个100.000行),目前使用bash脚本导入CSV:

for f in *.csv
 do
  echo "Processing CSV: $f"
  /usr/bin/mysql -u database_user --password=pass database_name -e "
  LOAD DATA LOCAL INFILE '$f'
    INTO TABLE database_name
    FIELDS TERMINATED by ','
          ENCLOSED BY '\"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES
  "
done

该脚本尚未完成,但是它已经运行了24多个小时。.我怀疑1400万条记录对于MySQL来说真的太多了,大约200万条记录变得非常慢(比如说大约100行p /第二)。我正在运行具有足够可用内存的专用服务器,并且导入运行时服务器负载也很稳定。

这是我的一些配置(禁用了日志bin,如果您需要更多配置,请告诉我):

max_connections     = 250
connect_timeout     = 5
wait_timeout        = 600
max_allowed_packet  = 32M
thread_cache_size       = 128
sort_buffer_size    = 4M
bulk_insert_buffer_size = 16M
tmp_table_size      = 32M
max_heap_table_size = 32M

我可以做任何类型的表演吗?

编辑:

关于重复标记,我现在进行了以下更改:

  • 禁用自动提交
  • 禁用foreign_key_checks
  • 禁用unique_checks
  • 增加innodb_buffer_pool_size值
  • 将innodb_flush_log_at_trx_commit,innodb_doublewrite和innodb_support_xa设置为0
  • 增加innodb_log_file_size值

导入似乎要快一些,但是主键索引似乎尚未更新。完成后我会抬起头来!

编辑2:

导入速度似乎更快,但是在记录了1300万条记录之后,导入速度确实很慢。还有70万条记录要走,我认为现在每2小时要有10万条记录。

0 个答案:

没有答案