2014-12-20 3 views
0

пытается выяснить несколько способов обойти эту проблему, и обратно на площадь 1.командной строки MySQL Скрипт

Мой хостинг пакет только по-видимому, имеет поддержку программного обеспечения для PHP, Sendmail и Perl из командной строки - но мне нужно для определения наилучшего способа запуска SQL-скрипта, будь то из командной строки в виде скрипта MySQL (если это возможно) или в PHP или Perl-скрипте.

Я пробовал следующий скрипт в PHP-скрипте, но LOAD DATA LOCAL INFILE не позволяет ему работать должным образом, поэтому я в тупике, чтобы упростить решение ... но на этом этапе я возьму любой!

<?php 
$con = mysqli_connect('xxx.xxx.xxx.xx', 'xxxx-xxxxxxx', 'xxxxxxxxx', 'xxxx-xxxxxxx'); 
mysqli_query($con, "LOAD DATA LOCAL INFILE 'http://www.mydomain.co.uk/datafeed.csv' REPLACE INTO TABLE product_feed FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS"); 
mysqli_close($con); 

командной строки очень ново для меня, и честно говоря мне нужно только знать, как это, как я построить работу график задачи/хрон для сценария обновления.

Может кто-нибудь помочь мне

+0

'LOAD DATA LOCAL' предназначен для использования с удаленного клиента, где' LOCAL' относится к клиенту. Если вы выполняете это на сервере, отбросите ключевое слово LOCAL и убедитесь, что пользователь MySQL имеет соответствующий доступ к исходному каталогу. Кроме того, я не верю, что MySQL поддерживает чтение файла с URL-адреса. –

+0

Если я удаляю LOCAL, MySQL говорит мне, что у меня нет разрешения на доступ к базе данных. Я проверил это с моим хост-провайдером, и это правильно, и они не позволяют ограничениям на предоставление полномочий или привилегий для MySQL - следовательно, я «устанавливаю» для параметра LOCAL, хотя это не мое предпочтение. – user2505513

+0

Из руководства MySQL: _ Если задан LOCAL, файл считывается клиентской программой на клиентском хосте и отправляется на сервер. См. Ссылку [здесь] (http://dev.mysql.com/doc/refman /5.5/en/load-data.html). То, что вы делаете, просто не сработает. –

ответ

0

Где вы бежите это от? Предполагаю, что www.mydomain.co.uk - это ваш сервер, и вы получаете доступ к нему от внешнего клиента?

Основное различие между LOAD DATA и LOAD DATA LOCAL является то, что последний копирует файл с клиента на временный файл на сервере, прежде чем продолжить, как обычный LOAD DATA команды, используя скопированный файл; но как клиент MySQL, так и сервер должны были быть построены явно, чтобы включить его. Поскольку это потенциальная дыра в безопасности, я бы очень сильно сомневался, если бы сервер был построен таким образом.

Также не будет приниматься URL-адрес HTTP - вам необходимо указать путь . Если вы используете LOAD DATA с указанием только голого имени файла, тогда сервер будет искать его в каталоге базы данных по умолчанию; или если это путь относительный с компонентом каталога, тогда сервер рассматривает его как относящийся к каталогу данных ; абсолютные пути, конечно, используются буквально.

Как вы можете это работать, зависит от того, какие серверные каталоги вы можете написать, чтобы сервер MySQL также мог читать. Мало что можно получить от LOAD DATA LOCAL, так как вы можете скопировать файл CSV самостоятельно и иметь больше контроля над ним. Наиболее вероятным кандидатом является каталог данных, и вы можете обнаружить, где это используется

SHOW VARIABLES WHERE Variable_Name = "datadir" 

Затем, если вы поместите файл myfile.csv в этот каталог, вы можете использовать

LOAD DATA INFILE "./myfile.csv" ... 

, чтобы получить сервер для загрузки таблицы из вашего файла.

Надеюсь, это поможет.

Смежные вопросы