CSVtoMySQL

В процессе работы, нужно было перенести данные из точки А в базу данных, с помощью LibreOffice был сформирован csv файл с необходимыми данными, в следующем формате: разделитель запятая, текст заключаем в двойные кавычки «», переход на следующую строку \n.
Колонки в таблице какие нужно занести в базу:
number, stationport, stationside,lineside
Собственно это же нам нужно будет рассказать и MySQL.

Все действия выполняем в консольке, все файлы уже загружены на сервер БД.
Пробуем такую команду:
LOAD DATA LOCAL INFILE '/home/user/krosss.csv'
INTO TABLE kross
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(number, stationport, stationside,lineside)

Получаем ответ:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Причина: Не нравится MySQL слово LOCAL
Пробуем так
LOAD DATA INFILE '/home/user/krosss.csv'
INTO TABLE kross
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(number, stationport, stationside,lineside)

Получаем ответ:
ERROR 1045 (28000): Access denied for user 'mysqluser'@'localhost' (using password: YES)
Да какого же…
Cмотрим привилегии:
show grants for 'mysqluser'@'localhost'
....
GRANT ALL PRIVILEGES ON `somedb`.* TO 'mysqluser'@'localhost'

Можно дать права GRANT FILE конкретному пользователю, но идея меня почему-то смутила, и я решил сделать по другому
mysql -umysqluser -psomepass somedb --local-infile
LOAD DATA LOCAL INFILE '/home/user/krosss.csv'
INTO TABLE kross
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(number, stationport, stationside,lineside)
Query OK, 580 rows affected, 2 warnings (0.08 sec)
Records: 580 Deleted: 0 Skipped: 0 Warnings: 2

Бингооо!

Литература:
http://dev.mysql.com/doc/refman/5.0/en/loading-tables.html
http://stackoverflow.com/questions/16011143/insert-csv-to-mysql-using-ubuntu-terminal-via-shell-script
http://stackoverflow.com/questions/13552206/grant-file-on-just-one-database
http://stackoverflow.com/questions/1014724/mysql-permission-errors-with-load-data
http://stackoverflow.com/questions/11077801/import-csv-to-mysql-table


Комментарии: