mysqlimport выдает ошибку при запуске как задания cron, но не в интерактивном режиме (Ubuntu 14.02)

mysqlimport выдает ошибку при запуске как задания cron, но не в интерактивном режиме (Ubuntu 14.02)

У меня есть скрипт bash, который загружает и импортирует CSV-файл в локальный MySQL. База данных — MySQL 5.6 на Ubuntu 14.04, я загружаю данные с помощью следующего оператора (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

проблема в том, что когда я запускаю скрипт из командной строки, с тем же пользователем, он работает нормально от загрузки до фазы импорта. Я добавил запись в crontab для запуска скрипта с помощью команды

crontab -u theuser -e

Пользователь'Пользователь'то же самое, что и для корректного запуска скрипта из командной строки. 'daily_info' также является именем таблицы, в которую данные добавляютсяmysqlimportкоманда.

Я ожидаю, что задача crontab будет запущена как'Пользователь'разрешение доступа ко всем папкам и файлам,так же, как это делает интерактивная оболочка, но это кажется неправдой. Запланированное задание выдает мне это сообщение об ошибке

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

Я нашел много вопросов, связанных сбезопасный-файл-privпроблема, но ответы не очень подходят к данному случаю, я подозреваю, что команда в моем скрипте (mysqlimport) выполняется от имени другого пользователя, но я не могу это диагностировать.

Любая помощь будет оценена по достоинству. Спасибо.

решение1

Я не нашел объяснения, но пришел к (частичному) решению моего собственного вопроса. Надеюсь, другие могут внести свой вклад в улучшение этого. При запуске из командной строки скрипт работает нормально, когда он активируется из crontab, он применяет то, что установлено взащищенный_файл_privпеременная mysql. Поэтому я изменилмой.cnfфайл, добавив строку под[mysqld]группа, как показано здесь:

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

После этого необходимо перезапустить MySQL и проверить, вступили ли изменения в силу, с помощью этого запроса:

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

Обратите внимание, что когда база данных загружает.cnfфайле символ «-» преобразуется в «_» (подчеркивание).

Связанный контент