LOAD DATA INFILE '/home/xx/xxx.csv'
当我使用 上面的 SQL 语句将 csv 文件 导入 mysql 时候,出错:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
查看官方文档,secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。
- secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
- secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
- secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
查看secure-file-priv参数的值:
mysql> show global variables like '%secure_file_priv%';
输出的 secure_file_priv /var/lib/mysql-files/
说明文件只能在该位置导入/导出。可以将文件放在该位置,也可以指定自己的 secure_file_priv 位置。
假设修改为 /home/xx
sudo vim /etc/mysql/my.cnf 添加为:
[mysqld]
secure_file_priv='/home/xx'
再次查看:
mysql> show global variables like '%secure_file_priv%';
输出的 secure_file_priv' /home/xx'
重启mysql
service mysql restart
报错:
ERROR 29 (HY000) at line 16: File '/home/xx/xxx.csv' not found (OS errno 13 - Permission denied)
sudo vim /etc/apparmor.d/usr.sbin.mysqld } 前面 加入 /home/xx/** rw,
sudo /etc/init.d/apparmor reload
sudo mysql -u root -p < xx.sql # 成功
在下面的语句中 `order` `height(cm)` 列名称使用的是反引号,避免冲突,这里 order 是关键字 而() 也会有问题,所以加 反问号。 反问号在 数字键 左边。
CREATE TABLE president_heights (
`order` BIGINT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`height(cm)` INT NOT NULL,
PRIMARY KEY (`order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
关闭mysql: service mysql stop