ПОМИЛКА: завантаження локальних даних вимкнено - це потрібно ввімкнути як на клієнтській, так і на сервері


11

Я не розумію відповідей, які надали інші на подібні запитання, окрім найбільш очевидних, таких як наведений нижче:

mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.01 sec)

Під цим я маю на увазі точний код. Я дуже вдячний, якби хтось міг пройти мене крок за кроком, що мені потрібно зробити, щоб увімкнути локальні дані на стороні "клієнта" та "сервера". Схоже, я включив локальні дані на стороні клієнта, але я не знаю, які вказівки мені потрібно дати своєму комп’ютеру, щоб увімкнути "серверну сторону". Я зовсім не підкований, і просто хочу отримати можливість дістатись до того, коли дані були завантажені на робочу версію MySQL.

ERROR 3948 (42000): Loading local data is disabled; this must be enabled on both the client and server sides
CREATE TABLE toys (
uniq_id VARCHAR(1000),
product_name VARCHAR(1000),
manufacturer VARCHAR(1000),
price VARCHAR(1000),
number_available_in_stock VARCHAR (1000),
number_of_reviews INT,
number_of_answered_questions INT,
average_review_rating VARCHAR(1000),
amazon_category_and_sub_category VARCHAR(1000),
customers_who_bought_this_item_also_bought VARCHAR(1000),
description VARCHAR(1000),
product_information VARCHAR(1000),
product_description VARCHAR(1000),
items_customers_buy_after_viewing_this_item VARCHAR(1000),
customer_questions_and_answers VARCHAR(1000),
customer_reviews VARCHAR(1000),
sellers VARCHAR(1000)
);

LOAD DATA LOCAL INFILE ‘/Users/BruddaDave/Desktop/amazonsample.csv INTO TABLE toys
FIELDS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\n
IGNORE 1 LINES
(uniq_id, product_name, manufacturer, price, number_available_in_stock, number_of_reviews, number_of_answered_questions, average_review_rating, amazon_category_and_sub_category, customers_who_bought_this_item_also_bought, description, product_information, product_description, items_customers_buy_after_viewing_this_item, customer_questions_and_answers, customer_reviews, sellers)
;

Я просто хочу мати можливість імпортувати .csv-файл у MySQL за допомогою оболонки командного рядка.


Відповіді:


7

Якщо функція LOCAL відключена, або на сервері, або на стороні клієнта, клієнт, який намагається видати оператор LOAD DATA LOCAL, отримує таке повідомлення про помилку:

ERROR 3950 (42000): Loading local data is disabled; this must be
enabled on both the client and server side

З тією ж проблемою я зіткнувся, коли хочу завантажити текстовий файл pet.txt у таблицю з домашніми тваринами за підручником Mysql: https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

Після пошуку в Інтернеті я зафіксував це за допомогою наступних кроків:

  1. встановити глобальні змінні за допомогою цієї команди:
mysql> SET GLOBAL local_infile=1;
Query OK, 0 rows affected (0.00 sec)
  1. вийти з поточного сервера:
mysql> quit
Bye
  1. підключитися до сервера за допомогою системної змінної локальної infile:
mysql --local-infile=1 -u root -p1

Ця змінна управляє функцією LOCAL на стороні сервера для операторів LOAD DATA. Залежно від налаштування local_infile, сервер відмовляється або дозволяє завантажувати локальні дані клієнтами, у яких LOCAL увімкнено на стороні клієнта. Щоб явно змусити сервер відмовити або дозволити оператори LOAD DATA LOCAL (незалежно від того, як налаштовані клієнтські програми та бібліотеки в час збирання або час виконання), запустіть mysqld з відключеним або включеним local_infile відповідно. local_infile також можна встановити під час виконання.

  1. використовуйте свою Базу даних та завантажте файл у таблицю:
mysql> use menagerie
Database changed
mysql> load data local infile '/path/pet.txt' into table pet;
Query OK, 8 rows affected, 7 warnings (0.00 sec)

Це працює?

Список літератури:

https://dev.mysql.com/doc/refman/8.0/en/load-data-local-security.html https://dev.mysql.com/doc/refman/8.0/uk/source-configuration-options .html # option_cmake_enabled_local_infile https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_local_infile


Це працює для мене :-)
Брайон Нікосон

2

my.cnf файл:

[client]  
local_infile=1

З офіційної документації на MySQL 8.0 .


Документи MySql не дуже зрозумілі. Ви встановлюєте [client], як зробити так, щоб сторона сервера та клієнт виходили правильно? У Ubuntu з MySql 8 файл my.cnf - це лише пара каталогів, що посилаються на /etc/mysql/mysql.conf.d та /etc/mysql/conf.d. Я намагаюся налаштування у файлі mysql.conf.d / mysql.cnf. Але, чесно кажучи, як може мати сенс мати одну папку з одноіменними файлами "mysql.cnf" як на верхньому рівні, так і в кожному підкаталозі. І жодних змін для сервера?
pauljohn32

1
Знайдіть той конфігураційний файл, який має тег [mysqld] і який використовується. Додайте ту саму глобальну конфігурацію під цим тегом, як і під тегом [client].
Адам Фрідман

@AdamFriedman Дякую за очко! Для мене був файл конфігураційного сервера, /etc/mysql/mysql.conf.d/mysqld.cnfі я додав local_infile = 1 під [mysqld] і він працює зараз! На даний момент я не можу відредагувати цю відповідь, оскільки черга редагування повна, але без пари mysqld вона неповна.
aderchox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.