Мне нужно создать локальную установку MySQL для разработки Shiny App Dashboard для аналитики (язык R, мои знания SQL базовые, для простых громоздких запросов, которые я затем настраиваю в R).
Развернутая версия будет находиться на сервере MS SQL, поэтому я хочу настроить основные таблицы, которые я буду использовать (которые в формате csv, небольшой отрывок из реального), чтобы попытаться оптимизировать мой SQL-запрос. Первоначально я использовал Postgres SQL, но обнаружил несколько различий в синтаксисе, поэтому решил перезапустить и внедрить MySQL, который, насколько мне известно, должен быть таким же в отношении синтаксиса запросов.
- Я загрузил установщик Windows сообщества MySQL и установил полная версия на мою машину со всеми настройками по умолчанию.
- Я успешно создал сервер (все настройки по умолчанию) и назвал его в MySQL Workbench
- Затем я успешно создал одну тестовую таблицу со всеми правильными именами столбцов и т. д.
CREATE TABLE servername.test_table( col1 text,
col2 int,
col3 int,
col4 text,
...
col40 text);
- Используя приведенный ниже код, я попытался загрузить CSV в
servername.test_table
LOAD DATA INFILE 'D:\Dropbox\R-Projects\SQL\SAMPLE DATASETS\DATA1.csv'
INTO TABLE servername.test_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
Проблема возникает, когда я пытаюсь загрузить csv в нужную таблицу, я получаю:
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
После некоторых исследований вместо того, чтобы вмешиваться в ограничения доступа, в которых у меня нет опыта и полной настройки БД. Простым возможным решением было бы просто хранить файлы в каталоге, который позволяет secure_file_priv
.
Я выполнил команду SQL:
SHOW VARIABLES LIKE "secure_file_priv";
Получил каталог: C:\ProgramData\MySQL\MySQL Server 8.0\Uploads
и сохранил копию CSV-файла в этом каталоге, а затем запустил следующее, чтобы попытаться загрузить CSV:
LOAD DATA LOCAL INFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\DATA1.csv'
INTO TABLE servername.test_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
После вышеизложенного следующей ошибкой стала новая ошибка:
Error Code: 2068. LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
Вернувшись к исследованиям, я начал пытаться возиться с настройками и командной строкой MySQL.
Проверил настройку сервера для local_infile
с SHOW GLOBAL VARIABLES LIKE 'local_infile';
в качестве запроса в MySQL Workbench, результат был: Value - ON
что, насколько я понимаю, должно было позволить вторую попытку с использованием LOAD DATA LOCAL INFILE
сработать, это не так.
Ссылка ниже предлагает добавить следующее в файл my.ini
.
ОШИБКА 2068 (HY000): Запрос файла LOAD DATA LOCAL INFILE отклонен из-за ограничений доступа
[client]
loose-local-infile=1
[mysqld]
local_infile=1
Я сделал это, а также перезапустил службу MySQL80, чтобы проверить, реализована ли она... Попытка снова загрузить CSV безрезультатно.
Может ли кто-нибудь помочь мне загрузить этот CSV-файл, чтобы я мог сосредоточиться на своей реальной работе? Я занимался этим в течение 2 дней, и, похоже, это распространенная проблема, но я не видел и «тупого» пошагового устранения неполадок, как я представил.
Если я могу попросить, пожалуйста, попробуйте и предоставить пошаговый подход к устранению этой проблемы. Навыки управления сервером MySQL почти нулевые, я привык иметь доступ к БД и просто выполнять запросы.
Извините за длинное сообщение, но я хотел быть как можно более подробным, чтобы показать, что я пробовал большинство решений, которые я нашел, но безуспешно.
(не уверен, что это уместно: при использовании рабочей станции Threadripper 3960x с 128 ГБ оперативной памяти, Windows 10 Pro, MySQL была полностью установлена на том же диске, что и Windows 10 Pro)
Спасибо за уделенное время.
MySQL <> SQL Server - пожалуйста, исправьте свои теги.
Если вашей целевой rdbms является сервер ms sql, то зачем тратить время на mysql? Mysql также имеет несколько отличий в синтаксисе и функциях от сервера ms sql, поэтому все, что вы разрабатываете на сервере mysql, вы не сможете использовать на сервере ms sql.
Если вы ищете минимальные синтаксические отличия от SQL-сервера, MySQL ничем не лучше, чем PostgreSQL. Скорее всего, вам будет гораздо лучше просто использовать SQL Server Express (microsoft.com/en-us/sql-server/sql-server-downloads).
Вы пробовали использовать экранированные обратные косые черты или преобразовывать их в косые черты?
LOAD DATA LOCAL INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\DATA1.csv'
илиLOAD DATA LOCAL INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/DATA1.csv'
@УиллБ. да, я сделал, безуспешно. Спасибо за предложение.
@Shadow Спасибо за ваш вклад, я не знал об этом. У меня сложилось впечатление, что MySQL имеет тот же синтаксис, что и MS SQL Server для запросов. Я решил просто развернуть базу данных в базе данных Azure.
@JoachimIsaksson Я не знал о разнице в синтаксисе запросов. Я решил развернуть все на Azure.