mysql用LOAD DATA INFILE导入数据

使用以下语句导入数据

LOAD DATA INFILE '/home/jason/st_stock.txt' INTO TABLE st_stock FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';

一开始以为是没把文件放在mysql的临时目录下,于是使用以下命令查看mysql的临时目录

mysql> show variables like '%tmpdir%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| slave_load_tmpdir | /tmp  |
| tmpdir            | /tmp  |
+-------------------+-------+

把文件放到/tmp目录下,再执行以下语句

LOAD DATA INFILE '/tmp/st_stock.txt' INTO TABLE st_stock FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';

这次报错

ERROR 29 (HY000): File '/tmp/st_stock.txt' not found (Errcode: 13)

在晚上搜索发现这篇文章:www.phpddt.com/db/mysql-error-29.html

执行以下命令

sudo vim /etc/apparmor.d/usr.sbin.mysqld

在usr.sbin.mysqld文件把tmp目录加加上,如下:

/usr/sbin/mysqld {
  ......
  /etc/mysql/*.pem r,
  /etc/mysql/conf.d/ r,
  /etc/mysql/conf.d/* r,
  /etc/mysql/*.cnf r,
  /usr/lib/mysql/plugin/ r,
  /usr/lib/mysql/plugin/*.so* mr,
  /usr/sbin/mysqld mr,
  /usr/share/mysql/** r,
  /var/log/mysql.log rw,
  /var/log/mysql.err rw,
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /var/log/mysql/ r,
  /var/log/mysql/* rw,
  /var/run/mysqld/mysqld.pid rw,
  /var/run/mysqld/mysqld.sock w,
  /run/mysqld/mysqld.pid rw,
  /run/mysqld/mysqld.sock w,

  /sys/devices/system/cpu/ r,
  /tmp/r,
  /tmp/* rw,

  ....
}

重启服务:

sudo /etc/init.d/apparmor reload

再执行语句

LOAD DATA INFILE '/tmp/st_stock.txt' INTO TABLE st_stock FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';
Query OK, 2088 rows affected (0.09 sec)
Records: 2088  Deleted: 0  Skipped: 0  Warnings: 0

成功,而且貌似很快

你可能感兴趣的:(mysql,load,Data,infile)