Habilitando LOAD DATA LOCAL INFILE no mysql

10

LOAD DATA LOCAL INFILEnão está ativado por padrão. Normalmente, ele deve ser ativado colocando local-infile=1-o my.cnf. Mas não funciona para todas as instalações. Na minha experiência, funcionou para o Debian 7, mas não o mínimo para o Debian 7, embora ambas as instalações venham do mesmo pacote pré-compilado. Ambos no OpenVZ VPS.

Como depurar por local-infile=1que não funciona em uma instalação e como ativar com segurança LOAD DATA LOCAL INFILE?

Googlebot
fonte

Respostas:

19

Se o mínimo do MySQL Debian-7 não puder ser usado local_infile, verifique todos os arquivos make usados ​​para compilar para ver se ele está desabilitado por padrão ou se local_infileestá habilitado para o Debian-7.

Antes de tomar esse tipo de tempo, execute o seguinte:

SHOW GLOBAL VARIABLES LIKE 'local_infile';
SET GLOBAL local_infile = 'ON';
SHOW GLOBAL VARIABLES LIKE 'local_infile';

Deve ecoar o seguinte:

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL local_infile = 'ON';
Query OK, 0 rows affected (0.06 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql>

Se ainda assim diz 'OFF', examine profundamente as configurações do compilador para habilitá-lo.

Se definido como 'ON', você está bem.

Por favor note que eu não disse

SET GLOBAL local_infile = 1;

Eu disse uso

SET GLOBAL local_infile = 'ON';

A opção local_infile é booleana, não numérica .

Se definir isso em my.cnf

[mysqld]
local_infile=ON

e reiniciar o mysql também não funciona, você terá que iniciar o mysql com algo como isto:

echo "SET GLOBAL local_infile = 'ON';" > /var/lib/mysql/init_file.sql
chown mysql:mysql /var/lib/mysql/init_file.sql
service mysql stop
service mysql start --init-file=/var/lib/mysql/init_file.sql
rm -f /var/lib/mysql/init_file.sql

ou talvez adicionando isso a my.cnf

[mysqld]
init-file=/var/lib/mysql/init_file.sql

então reinicie o mysql.

De uma chance !!!

RolandoMySQLDBA
fonte
Obrigado por suas instruções práticas para depuração, o que eu realmente precisava. No primeiro passo, revelou, estou no caminho errado, como mostrado local_infile | ON . Parece que o problema não é mysql, mas PHPou provavelmente o conector / driver mysql-PHP (mysqli).
Googlebot
Eu tive que usar isso em php para que ele funcione com MSQLI: $con = mysqli_init(); $con->options(MYSQLI_OPT_LOCAL_INFILE, true);
Radu Bogdan
Habilitar no PHP mysqli.allow_local_infile = Onfoi bom para mim porque GLOBAL local_infile = 'ON';já estava ativado.
Rolands.EU