I tried adding lines to my.cnf
[mysql]
infile = 1
[mysqld]
infile = 1
SHOW VARIABLES LIKE "%infile"
displays true in mysql.
But LOAD DATA does not work. I tried it in a PHP script and in phpMyAdmin.
It only works if I start mysql from the command line with the --allow-infile
flag
mysql --local-infile -u root -p db_name
But this did not solve the PHP problem.
I finally solved the issue in what seems like a ridiculously simple way. I've seen so many posts regarding this problem but the only solution I found that worked was one that was somewhat hidden in a stackoverflow post. It turns out the issue can be solved at connect time (which makes sense):
The answer is right there on the manual page, it turns out.
The only thing I still don't understand is why this is necessary on my new Ubuntu install but has never been a problem on any other system, Ubuntu or CentOS.
I should also add that the above method is probably more portable than other methods, since you are setting the connection type in the code rather than in a config file.
There is an option for allowing the LOAD DATA LOCAL INFILE query in /etc/my.cnf:
Remember to restart MySQL after applying the change.
For Ubuntu users i've found the solution. This problem is related to AppArmor MySQL LOAD DATA INFILE - AppArmor issue