mysqlimport da error cuando se ejecuta como trabajo cron pero no de forma interactiva (Ubuntu 14.02)

mysqlimport da error cuando se ejecuta como trabajo cron pero no de forma interactiva (Ubuntu 14.02)

Tengo un script bash que descarga y luego importa un archivo CSV a un MySQL local. La base de datos es MySQL 5.6 en Ubuntu 14.04, estoy cargando datos con la siguiente declaración (bash):

 mysqlimport --ignore-lines=1 --lines-terminated-by='\n' --fields-terminated-by=',' --verbose --local --user=xx --password=xxxxxxxx mydb /var/www/mysite/data/daily_info.csv

el problema es que cuando ejecuto el script desde la línea de comando, con el mismo usuario, funciona bien desde la descarga hasta la fase de importación. Agregué una entrada crontab para ejecutar el script con el comando

crontab -u theuser -e

El usuario'el usuario'es el mismo que lanza correctamente el script desde la línea de comando. 'daily_info' es también el nombre de la tabla a la que el usuario agrega datos.importación mysqldominio.

Esperaría que la tarea crontab se ejecutara como'el usuario'permitiendo el acceso a todas las carpetas y archivos,tal como lo hace el shell interactivo, pero esto parece no ser cierto. El trabajo programado me da este mensaje de error

mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table: daily_info

He encontrado muchas preguntas relacionadas con elarchivo-seguro-privproblema pero las respuestas no encajan bien con este caso, sospecho que el comando en mi script (mysqlimport) se está ejecutando con un usuario diferente, pero no puedo diagnosticarlo.

Cualquier ayuda sería apreciada. Gracias.

Respuesta1

No encontré una explicación pero llegué a una solución (parcial) a mi propia pregunta. Espero que otros puedan contribuir a mejorar esto. Cuando se ejecuta desde la línea de comando, el script se ejecuta bien, cuando se activa desde crontab aplica lo que está configurado en elarchivo_seguro_privvariable mysql. Así que modifiqué elmi.cnfarchivo agregando una línea debajo del[mysqld]grupo como se muestra aquí:

[mysqld]
...other settings here...
secure-file-priv=/mypath/datafolder/

Luego de eso debes reiniciar mysql y verificar si el cambio tiene efecto con esta consulta:

mysql> show variables like 'secure-file-priv';
+------------------+------------------------+
| Variable_name    | Value                  |
+------------------+------------------------+
| secure_file_priv | /mypath/datafolder/    |
+------------------+------------------------+
1 row in set (0.01 sec)

Observe que cuando la base de datos carga el.cnfarchivo, el carácter '-' se convierte en '_' (guión bajo).

información relacionada